(function() {
	function ta(a) {
		a = (a || 0) % ua;
		return a < 0 ? ua + a: a
	}
	function ya(a, c, d, b, g, m, e, f, k, l) {
		if (typeof a === "object") c = a.y,
		d = a.r,
		b = a.innerR,
		g = a.radiusYFactor,
		m = a.depth,
		e = a.seriesGroup,
		f = a.renderer,
		a = a.x;
		if (g < 0 || g >= 1) g = 0.6;
		a = a || 0;
		c = c || 0;
		d = d || 1;
		b = b || 0;
		m = m || 0;
		this.renderer = f;
		this.hasOnePoint = k;
		this.use3DLighting = l;
		this.cx = a;
		this.cy = c;
		this.rx = d;
		this.ry = d * g;
		this.radiusYFactor = g;
		this.isDoughnut = b > 0;
		this.innerRx = b;
		this.innerRy = b * g;
		this.depth = m;
		this.leftX = a - d;
		this.rightX = a + d;
		this.leftInnerX = a - b;
		this.rightInnerX = a + b;
		this.depthY = c + m;
		this.topY = c - this.ry;
		this.bottomY = this.depthY + this.ry;
		this.bottomBorderGroup = f.g("bottom-border").add(e).translate(0, m);
		this.outerBackGroup = f.g("outer-back-Side").add(e);
		this.slicingWallsBackGroup = f.g("slicingWalls-back-Side").add(e);
		this.innerBackGroup = f.g("inner-back-Side").add(e);
		this.innerFrontGroup = f.g("inner-front-Side").add(e);
		this.slicingWallsFrontGroup = f.g("slicingWalls-front-Side").add(e);
		this.outerFrontGroup = f.g("outer-front-Side").add(e);
		this.topGroup = f.g("top-Side").add(e);
		this.moveCmdArr = [G];
		this.lineCmdArr = [N];
		this.closeCmdArr = [K];
		this.centerPoint = [a, c];
		this.leftPoint = [this.leftX, c];
		this.topPoint = [a, this.topY];
		this.rightPoint = [this.rightX, c];
		this.bottomPoint = [a, c + this.ry];
		this.leftDepthPoint = [this.leftX, this.depthY];
		this.rightDepthPoint = [this.rightX, this.depthY];
		this.leftInnerPoint = [this.leftInnerX, c];
		this.rightInnerPoint = [this.rightInnerX, c];
		this.leftInnerDepthPoint = [this.leftInnerX, this.depthY];
		this.rightInnerDepthPoint = [this.rightInnerX, this.depthY];
		this.pointElemStore = [];
		this.slicingWallsArr = [];
		a = [da, this.rx, this.ry, 0, 0, 1, this.rightX, c];
		d = [da, this.rx, this.ry, 0, 0, 1, this.leftX, c];
		b = [da, this.rx, this.ry, 0, 0, 0, this.rightX, this.depthY];
		g = [da, this.rx, this.ry, 0, 0, 0, this.leftX, this.depthY];
		m = [da, this.innerRx, this.innerRy, 0, 0, 0, this.rightInnerX, c];
		c = [da, this.innerRx, this.innerRy, 0, 0, 0, this.leftInnerX, c];
		e = [da, this.innerRx, this.innerRy, 0, 0, 1, this.rightInnerX, this.depthY];
		f = [da, this.innerRx, this.innerRy, 0, 0, 1, this.leftInnerX, this.depthY];
		this.isDoughnut ? (this.topBorderPath = this.moveCmdArr.concat(this.leftPoint, a, d, this.moveCmdArr, this.leftInnerPoint, m, c), this.topPath = this.moveCmdArr.concat(this.leftPoint, a, d, this.lineCmdArr, this.leftInnerPoint, m, c, this.closeCmdArr), this.innerFrontPath = this.moveCmdArr.concat(this.leftInnerPoint, m, this.lineCmdArr, this.rightInnerDepthPoint, f, this.closeCmdArr), this.innerBackPath = this.moveCmdArr.concat(this.rightInnerPoint, c, this.lineCmdArr, this.leftInnerDepthPoint, e, this.closeCmdArr)) : this.topBorderPath = this.topPath = this.moveCmdArr.concat(this.leftPoint, a, d, this.closeCmdArr);
		this.outerBackPath = this.moveCmdArr.concat(this.leftPoint, a, this.lineCmdArr, this.rightDepthPoint, g, this.closeCmdArr);
		this.outerFrontPath = this.moveCmdArr.concat(this.rightPoint, d, this.lineCmdArr, this.leftDepthPoint, b, this.closeCmdArr);
		this.clipPathforOuter = [G, this.leftX, this.topY, N, this.rightX, this.topY, this.rightX, this.bottomY, this.leftX, this.bottomY, K];
		this.clipPathforInner = [G, this.leftInnerX, this.topY, N, this.rightInnerX, this.topY, this.rightInnerX, this.bottomY, this.leftInnerX, this.bottomY, K];
		this.clipPathforNoClip = [G, this.leftInnerX, this.topY, N, this.leftInnerX, this.bottomY, K]
	}
	var na = CnbiSoft(["private", "modules.renderer.highcharts-charts"]);
	if (na !== void 0) {
		var t = na.hcLib,
		J = t.BLANKSTRING,
		Fa = t.createTrendLine,
		r = t.pluck,
		Z = t.getValidValue,
		n = t.pluckNumber,
		Y = t.defaultPaletteOptions,
		oa = t.getFirstValue,
		$a = t.getDefinedColor,
		ja = t.parseUnsafeString,
		S = t.FC_CONFIG_STRING,
		Ga = t.extend2,
		pa = t.getDashStyle,
		ab = t.toPrecision,
		bb = t.stubFN,
		L = t.Highcharts,
		cb = L.Series,
		ea = L.hasSVG,
		Ra = L.hasTouch,
		Sa = L.isIE,
		db = L.extend,
		Ta = L.merge,
		za = L.pick,
		ia = L.each,
		Aa = L.attr,
		Ha = L.map,
		na = L.seriesTypes,
		va = L.addEvent,
		eb = L.getPosition,
		Ba = L.getOptions().plotOptions,
		qa = function(a) {
			return a !== Ia && a !== null
		},
		Ia,
		fb = "rgba(192,192,192," + (ea ? 1.0E-6: 0.0020) + ")",
		ma = Sa && !ea ? "visible": "",
		G = "M",
		N = "L",
		da = "A",
		K = "Z",
		fa = Math,
		aa = fa.sin,
		ca = fa.cos,
		gb = fa.atan2,
		Ca = fa.round,
		Ja = fa.min,
		ka = fa.max,
		Ua = fa.abs,
		Ka = fa.PI,
		Ja = fa.min,
		ra = Ka / 180,
		$ = Math.PI,
		Da = $ / 2,
		ua = 2 * $,
		Va = $ + Da,
		hb = t.graphics.getColumnColor,
		M = t.getFirstColor,
		La = t.setLineHeight,
		Wa = t.pluckFontSize,
		wa = t.getFirstAlpha,
		sa = t.graphics.getDarkColor,
		la = t.graphics.getLightColor,
		X = t.graphics.convertColor,
		Ma = t.COLOR_TRANSPARENT,
		Na = t.POSITION_CENTER,
		ib = t.POSITION_TOP,
		Ea = t.POSITION_BOTTOM,
		jb = t.POSITION_RIGHT,
		kb = t.POSITION_LEFT,
		h = t.chartAPI,
		lb = t.titleSpaceManager,
		mb = t.placeLegendBlockBottom,
		nb = t.placeLegendBlockRight,
		Xa = t.graphics.mapSymbolName,
		Ya = h.singleseries,
		y = t.COMMASTRING,
		Za = t.STRINGUNDEFINED,
		ga = t.ZEROSTRING,
		xa = t.ONESTRING,
		ba = t.HUNDREDSTRING,
		Oa = t.PXSTRING,
		ob = t.COMMASPACE;
		h("column2d", {
			standaloneInit: !0,
			creditLabel: !0
		},
		h.column2dbase);
		h("column3d", {
			defaultSeriesType: "column3d",
			defaultPlotShadow: 1
		},
		h.column2d);
		h("bar2d", {
			isBar: !0,
			defaultSeriesType: "bar",
			spaceManager: h.barbase
		},
		h.column2d);
		h("line", {
			standaloneInit: !0,
			creditLabel: !0
		},
		h.linebase);
		h("area2d", {
			standaloneInit: !0,
			creditLabel: !0
		},
		h.area2dbase);
		h("pie2d", {
			standaloneInit: !0,
			defaultSeriesType: "pie",
			defaultPlotShadow: 1,
			point: function(a, c, d, b, g) {
				var m,
				e,
				f,
				k = g[S],
				l = k.is3d,
				j,
				i,
				R,
				p,
				Q = 0,
				s = 0,
				o = [],
				F = n(b.plotborderthickness, l ? 0.1: 1),
				q = (f = n(b.use3dlighting, 1)) ? n(b.radius3d, b["3dradius"], 90) : 100;
				j = n(b.showzeropies, 1);
				var h = !0,
				C = n(b.showpercentintooltip, 1),
				B = n(b.showlabels, 1),
				v = n(b.showvalues, 1),
				u = n(b.showpercentvalues, b.showpercentagevalues, 0),
				D = r(b.tooltipsepchar, b.hovercapsepchar, ob),
				w = r(b.labelsepchar, D),
				H = r(b.plotbordercolor, b.piebordercolor),
				t = g[S].numberFormatter;
				i = d.length;
				var I,
				x,
				G = n(b.plotborderdashed, 0),
				E = n(b.plotborderdashlen, 5),
				A = n(b.plotborderdashgap, 4);
				q > 100 && (q = 100);
				q < 0 && (q = 0);
				if (n(b.showlegend, 0)) g.legend.enabled = !0,
				g.legend.reversed = !Boolean(n(b.reverselegend, 0)),
				c.showInLegend = !0;
				if (!B && !v) g.plotOptions.series.dataLabels.enabled = !1,
				g.tooltip.enabled === !1 && (h = !1);
				for (a = 0; a < i; a += 1) e = d[a],
				m = t.getCleanValue(e.value, !0),
				m === null || !j && m === 0 || (o.push(e), Q += m);
				Q === 0 && (o = []);
				c.enableRotation = o.length > 1 ? n(b.enablerotation, 1) : 0;
				c.is3D = l;
				c.use3DLighting = f;
				c.pieYScale = n(b.pieyscale, 40);
				if (c.pieYScale < 1) c.pieYScale = 1;
				c.pieYScale /= 100;
				c.pieSliceDepth = n(b.pieslicedepth, 15);
				if (c.pieSliceDepth < 1) c.pieSliceDepth = 1;
				c.managedPieSliceDepth = c.pieSliceDepth;
				for (a = o.length - 1; a >= 0; a -= 1) {
					e = o[a];
					m = t.getCleanValue(e.value, !0);
					d = ja(r(e.label, e.name, J));
					j = r(e.color, g.colors[a % g.colors.length]);
					i = r(e.alpha, b.plotfillalpha, ba);
					R = r(e.bordercolor, H, la(j, l ? 90: 25)).split(y)[0];
					p = b.showplotborder == ga ? ga: r(e.borderalpha, b.plotborderalpha, b.pieborderalpha, "80");
					f = {
						opacity: Math.max(i, p) / 100
					};
					if (I = Boolean(n(e.issliced, b.issliced, 0))) k.preSliced = I;
					x = n(e.dashed, G) ? pa(r(e.dashlen, E), r(e.dashgap, A), F) : void 0;
					c.data.push({
						showInLegend: d !== J,
						y: m,
						name: d,
						shadow: f,
						toolText: ja(Z(e.tooltext)),
						color: this.getPointColor(j, i, q),
						_3dAlpha: i,
						borderColor: X(R, p),
						borderWidth: F,
						link: Z(e.link),
						sliced: I,
						dashStyle: x,
						doNotSlice: r(b.enableslicing, xa) != xa
					});
					if (h) j = t.percentValue(m / Q * 100),
					i = t.dataLabels(m) || J,
					f = C === 1 ? j: i,
					m = B === 1 ? d: J,
					j = v === 1 ? u === 1 ? j: i: J,
					j = (e = Z(e.displayvalue)) ? e: j !== J && m !== J ? m + w + j: r(m, j),
					d = d != J ? d + D + f: f,
					e = c.data[s],
					e.displayValue = j,
					e.toolText = r(e.toolText, d),
					s += 1
				}
				g.legend.enabled = b.showlegend == xa ? !0: !1;
				g.chart.startingAngle = r(b.startingangle, 0);
				return c
			},
			getPointColor: function(a, c, d) {
				var b,
				g,
				a = M(a),
				c = wa(c);
				d < 100 && ea ? (b = Math.floor((100 - 0.35 * d) * 85) / 100, b = sa(a, b), g = Math.floor((100 + d) * 50) / 100, a = la(a, g), c = {
					FCcolor: {
						color: a + y + b,
						alpha: c + y + c,
						ratio: d + ",100",
						radialGradient: !0
					}
				}) : c = {
					FCcolor: {
						color: a + y + a,
						alpha: c + y + c,
						ratio: "0,100"
					}
				};
				return c
			},
			configureAxis: function(a) {
				var c = 0,
				d = a[S],
				b;
				a.plotOptions.series.dataLabels.style = a.xAxis.labels.style;
				a.plotOptions.series.dataLabels.color = a.xAxis.labels.style.color;
				delete d.x;
				delete d[0];
				delete d[1];
				a.chart.plotBorderColor = a.chart.plotBackgroundColor = Ma;
				d = d.pieDATALabels = [];
				if (a.series.length === 1 && (b = a.series[0].data) && (c = a.series[0].data.length) > 0 && a.plotOptions.series.dataLabels.enabled) for (; c--;) b[c] && Z(b[c].displayValue) !== void 0 && d.push(b[c].displayValue)
			},
			spaceManager: function(a, c, d, b) {
				var g = a[S],
				m = g.is3d,
				e = this.name,
				f = g.smartLabel,
				k = n(g.pieDATALabels && g.pieDATALabels.length, 0),
				l = 0,
				j = c.chart,
				i = n(j.managelabeloverflow, 0),
				R = !g.preSliced && j.enableslicing == ga && (j.showlegend != xa || j.interactivelegend == ga) ? 0: n(j.slicingdistance, 20),
				p = n(j.pieradius, 0),
				Q = n(j.enablesmartlabels, j.enablesmartlabel, 1),
				s = Q ? n(j.skipoverlaplabels, j.skipoverlaplabel, 1) : 0,
				o = n(j.issmartlineslanted, 1),
				F = n(j.labeldistance, j.nametbdistance, 5),
				q = n(j.smartlabelclearance, 5);
				d -= a.chart.marginRight + a.chart.marginLeft;
				var h = b - (a.chart.marginTop + a.chart.marginBottom),
				b = Math.min(h, d),
				C = r(j.smartlinecolor, Y.plotFillColor[a.chart.paletteIndex]),
				B = n(j.smartlinealpha, 100),
				v = n(j.smartlinethickness, 1),
				u = a.plotOptions.series.dataLabels,
				D = u.style,
				w = n(parseInt(D.lineHeight, 10), 12),
				H = a.series[0],
				t = H.pieYScale,
				I = H.pieSliceDepth,
				b = p === 0 ? b * 0.15: p,
				x = 0,
				x = 2 * b;
				u.connectorWidth = v;
				u.connectorColor = X(C, B);
				h -= lb(a, c, d, x < h ? h - x: h / 2);
				j.showlegend == xa && (r(j.legendposition, Ea).toLowerCase() != jb ? h -= mb(a, c, d, h / 2, !0) : d -= nb(a, c, d / 3, h, !0));
				f.setStyle(D);
				if (k !== 1) for (; k--;) c = f.getOriSize(g.pieDATALabels[k]),
				l = Math.max(l, c.width);
				Q && (F = q + R);
				p === 0 && (m ? (h -= I, x = Math.min(d / 2 - l, (h / 2 - w) / t) - F) : x = Math.min(d / 2 - l, h / 2 - w) - F, x >= b ? b = x: F = Math.max(F - (b - x), R));
				if (m && (k = h - 2 * (b * t + w), I > k)) H.managedPieSliceDepth = I - k;
				a.plotOptions.pie3d.slicedOffset = a.plotOptions.pie.slicedOffset = R;
				a.plotOptions.pie3d.size = a.plotOptions.pie.size = 2 * b;
				a.plotOptions.series.dataLabels.distance = F;
				a.plotOptions.series.dataLabels.isSmartLineSlanted = o;
				a.plotOptions.series.dataLabels.enableSmartLabels = Q;
				a.plotOptions.series.dataLabels.skipOverlapLabels = s;
				a.plotOptions.series.dataLabels.manageLabelOverflow = i;
				if (e === "doughnut2d" || e === "doughnut3d") if (e = n(j.doughnutradius, 0), k = n(j.use3dlighting, 1) ? n(j.radius3d, j["3dradius"], 50) : 100, k > 100 && (k = 100), k < 0 && (k = 0), j = e === 0 || e >= b ? b / 2: e, a.plotOptions.pie3d.innerSize = a.plotOptions.pie.innerSize = 2 * j, k > 0 && ea && (j = parseInt(j / b * 100, 10), e = (100 - j) / 2, k = parseInt(e * k / 100, 10), j = j + y + k + y + 2 * (e - k) + y + k, a.series[0] && a.series[0].data)) {
					i = a.series[0].data;
					a = 0;
					for (k = i.length; a < k; a += 1) if (e = i[a], e.color.FCcolor) e.color.FCcolor.ratio = j
				}
			},
			creditLabel: !0,
			eiMethods: {
				togglePieSlice: function(a) {
					var c = this.jsVars.hcObj,
					d;
					if (c && c.series && (d = c.series[0]) && d.data && d.data[a] && d.data[a].slice) return d.data[d.xIncrement - 1 - a].slice()
				}
			}
		},
		Ya);
		h("pie3d", {
			defaultSeriesType: "pie3d",
			creditLabel: !0,
			getPointColor: function(a) {
				return a
			},
			defaultPlotShadow: 0
		},
		h.pie2d);
		h("doughnut2d", {
			getPointColor: function(a, c, d) {
				var b,
				a = M(a),
				c = wa(c);
				d < 100 && ea ? (b = Math.floor((85 - 0.2 * (100 - d)) * 100) / 100, b = sa(a, b), d = Math.floor((100 - 0.5 * d) * 100) / 100, a = la(a, d), c = {
					FCcolor: {
						color: b + y + a + y + a + y + b,
						alpha: c + y + c + y + c + y + c,
						radialGradient: !0
					}
				}) : c = {
					FCcolor: {
						color: a + y + a,
						alpha: c + y + c,
						ratio: "0,100"
					}
				};
				return c
			}
		},
		h.pie2d);
		h("doughnut3d", {
			defaultSeriesType: "pie3d",
			getPointColor: h.pie3d,
			defaultPlotShadow: 0
		},
		h.doughnut2d);
		h("pareto2d", {
			standaloneInit: !0,
			point: function(a, c, d, b, g) {
				var m,
				e,
				f,
				k,
				l,
				j,
				i,
				R,
				p,
				Q,
				s,
				o,
				h,
				q,
				W,
				a = d.length,
				C = 0;
				j = {};
				h = g.chart.paletteIndex;
				var B = /3d$/.test(g.chart.defaultSeriesType),
				v = this.isBar,
				u = r(360 - b.plotfillangle, 90),
				D = n(b.plotborderthickness, 1),
				w = g.chart.useRoundEdges,
				H = r(b.tooltipsepchar, ", "),
				t = r(b.plotbordercolor, Y.plotBorderColor[h]).split(y)[0],
				I = b.showplotborder == ga ? ga: r(b.plotborderalpha, b.plotfillalpha, ba),
				x = g.xAxis,
				G = n(b.showcumulativeline, 1),
				E = g[S],
				A = E.axisGridManager,
				N = E.x,
				K = b.showtooltip != ga,
				z = [],
				O = [],
				V = n(b.use3dlighting, 1),
				P = g[S].numberFormatter,
				L = n(b.showlinevalues, b.showvalues),
				T = n(b.plotborderdashed, 0),
				$ = n(b.plotborderdashlen, 5),
				aa = n(b.plotborderdashgap, 4),
				I = B ? b.showplotborder ? I: ga: I,
				t = B ? r(b.plotbordercolor, "#FFFFFF") : t;
				for (o = e = 0; e < a; e += 1) if (s = d[e], d[e].vline) A.addVline(x, s, o, g);
				else if (m = P.getCleanValue(s.value, !0), m !== null) s.value = m,
				z.push(s),
				o += 1;
				a = z.length;
				z.sort(function(a, b) {
					return b.value - a.value
				});
				if (G) i = n(b.linedashed, 0),
				q = M(r(b.linecolor, Y.plotBorderColor[h])),
				e = r(b.linealpha, 100),
				R = n(b.linedashlen, 5),
				p = n(b.linedashgap, 4),
				j = n(b.linethickness, 2),
				Q = {
					opacity: e / 100
				},
				W = n(b.drawanchors, b.showanchors),
				W === void 0 && (W = e != ga),
				f = n(b.anchorborderthickness, 1),
				l = n(b.anchorsides, 0),
				k = n(b.anchorradius, 3),
				o = M(r(b.anchorbordercolor, q)),
				m = M(r(b.anchorbgcolor, Y.anchorBgColor[h])),
				d = wa(r(b.anchoralpha, ba)),
				s = wa(r(b.anchorbgalpha, d)) * d / 100,
				i = i ? pa(R, p, j) : void 0,
				j = {
					yAxis: 1,
					data: [],
					type: "line",
					color: X(q, e),
					lineWidth: j,
					marker: {
						enabled: W,
						fillColor: X(m, s),
						lineColor: X(o, d),
						lineWidth: f,
						radius: k,
						symbol: Xa(l),
						startAngle: r(b.anchorstartangle, 90)
					}
				};
				else {
					if (b.showsecondarylimits !== "1") b.showsecondarylimits = "0";
					if (b.showdivlinesecondaryvalue !== "1") b.showdivlinesecondaryvalue = "0"
				}
				for (e = 0; e < a; e += 1) s = z[e],
				m = n(s.showlabel, b.showlabels, 1),
				d = ja(!m ? J: oa(s.label, s.name)),
				A.addXaxisCat(x, e, e, d),
				C += m = s.value,
				f = r(s.color, g.colors[e % g.colors.length]) + y + $a(b.plotgradientcolor, Y.plotGradientColor[h]),
				k = r(s.alpha, b.plotfillalpha, ba),
				l = r(s.ratio, b.plotfillratio),
				o = {
					opacity: k / 100
				},
				q = r(s.alpha, I) + J,
				f = hb(f, k, l, u, w, t, q, v, B),
				c.data.push(Ga(this.getPointStub(s, m, d, g), {
					y: m,
					shadow: o,
					color: f[0],
					borderColor: f[1],
					borderWidth: D,
					use3DLighting: V,
					dashStyle: n(s.dashed, T) == 1 ? pa($, aa, D) : ""
				})),
				this.pointValueWatcher(g, m),
				G && O.push({
					value: C,
					dataLabel: d,
					tooltext: Z(s.tooltext)
				});
				N.catCount = a;
				E[1] || (E[1] = {});
				E[1].stacking100Percent = !0;
				if (G && C > 0) {
					e = 0;
					for (a = O.length; e < a; e += 1) s = O[e],
					g = c.data[e],
					m = s.value / C * 100,
					h = P.percentValue(m),
					b = g.displayValue !== J ? h: J,
					L == 1 && (b = h),
					L == 0 && (b = J),
					d = s.dataLabel,
					h = K ? s.tooltext !== void 0 ? s.tooltext: (d !== J ? d + H: J) + h: J,
					j.data.push({
						shadow: Q,
						y: m,
						toolText: h,
						displayValue: b,
						link: g.link,
						dashStyle: i
					});
					return [c, j]
				} else return c
			},
			defaultSeriesType: "column",
			isDual: !0,
			creditLabel: !0
		},
		Ya);
		h("pareto3d", {
			defaultSeriesType: "column3d",
			defaultPlotShadow: 1
		},
		h.pareto2d);
		h("mscolumn2d", {
			standaloneInit: !0,
			creditLabel: !0
		},
		h.mscolumn2dbase);
		h("mscolumn3d", {
			defaultSeriesType: "column3d",
			defaultPlotShadow: 1
		},
		h.mscolumn2d);
		h("msbar2d", {
			isBar: !0,
			defaultSeriesType: "bar",
			spaceManager: h.barbase
		},
		h.mscolumn2d);
		h("msbar3d", {
			defaultSeriesType: "bar3d",
			defaultPlotShadow: 1
		},
		h.msbar2d);
		h("msline", {
			standaloneInit: !0,
			creditLabel: !0
		},
		h.mslinebase);
		h("msarea", {
			standaloneInit: !0,
			creditLabel: !0
		},
		h.msareabase);
		h("stackedcolumn2d", {
			isStacked: !0
		},
		h.mscolumn2d);
		h("stackedcolumn3d", {
			isStacked: !0
		},
		h.mscolumn3d);
		h("stackedbar2d", {
			isStacked: !0
		},
		h.msbar2d);
		h("stackedbar3d", {
			isStacked: !0
		},
		h.msbar3d);
		h("stackedarea2d", {
			isStacked: !0,
			showSum: 0
		},
		h.msarea);
		h("marimekko", {
			isValueAbs: !0,
			distributedColumns: !0,
			isStacked: !0,
			xAxisMinMaxSetter: bb,
			postSeriesAddition: function(a, c) {
				var d = a[S],
				b,
				g,
				m,
				e,
				f,
				k = 0;
				e = a.xAxis;
				var l,
				j = 100 / d.marimekkoTotal,
				i = [],
				R = a.series,
				p,
				h = 0,
				s,
				o = n(c.chart.plotborderthickness, 1),
				F = a.chart.rotateValues,
				q = n(c.chart.rotatexaxispercentvalues, 0),
				o = o * -0.5 - (o % 2 + (q ? 0: 4)),
				r = q ? 3: 0,
				C = F ? 270: 0;
				g = d[0];
				var B = !g.stacking100Percent,
				v = d.inCanvasStyle;
				d.isXYPlot = !0;
				d.distributedColumns = !0;
				e.min = 0;
				e.max = 100;
				e.labels.enabled = !1;
				e.gridLineWidth = 0;
				e.alternateGridColor = Ma;
				b = g.stack;
				c.chart.interactivelegend = "0";
				f = 0;
				for (g = a.xAxis.plotLines.length; f < g; f += 1) if (l = e.plotLines[f], l.isGrid) l.isCat = !0,
				i[l.value] = l;
				if (b.floatedcolumn && (m = b.floatedcolumn[0])) {
					b = 0;
					for (g = m.length; b < g;) {
						k += e = m[b].p || 0;
						p = e * j;
						l = h + p / 2;
						s = h + p;
						for (f = 0; f < R.length; f += 1) a.series[f].data[b]._FCX = h,
						a.series[f].data[b]._FCW = p;
						d.showStackTotal && a.xAxis.plotLines.push({
							value: l,
							width: 0,
							isVline: B,
							isTrend: !B,
							label: {
								align: Na,
								textAlign: C,
								rotation: F ? 270: 0,
								style: d.trendStyle,
								verticalAlign: ib,
								y: 0,
								x: 0,
								text: this.numberFormatter.yAxis(ab(e, 10))
							}
						});
						if (i[b]) i[b].value = l,
						i[b]._weight = p;
						b += 1;
						d.showXAxisPercentValues && b < g && a.xAxis.plotLines.push({
							value: s,
							width: 0,
							isVine: !0,
							label: {
								align: Na,
								textAlign: q ? kb: Na,
								rotation: q ? 270: 0,
								style: {
									color: v.color,
									fontSize: v.fontSize,
									fontFamily: v.fontFamily,
									lineHeight: v.lineHeight,
									border: "1px solid",
									borderColor: v.color,
									backgroundColor: "#ffffff",
									backgroundOpacity: 1
								},
								verticalAlign: Ea,
								y: o,
								x: r,
								text: this.numberFormatter.percentValue(s)
							},
							zIndex: 5
						});
						h = s
					}
				}
			},
			defaultSeriesType: "floatedcolumn"
		},
		h.stackedcolumn2d);
		h("msstackedcolumn2d", {
			series: function(a, c, d) {
				var b,
				g,
				m,
				e,
				f = c[S],
				k = 0,
				l,
				j;
				l = [];
				var i;
				c.legend.enabled = Boolean(n(a.chart.showlegend, 1));
				if (a.dataset && a.dataset.length > 0) {
					this.categoryAdder(a, c);
					b = 0;
					for (g = a.dataset.length; b < g; b += 1) if (i = a.dataset[b].dataset) {
						m = 0;
						for (e = i.length; m < e; m += 1, k += 1) l = {
							data: [],
							stack: b
						},
						j = Math.min(f.oriCatTmp.length, i[m].data && i[m].data.length),
						l = this.point(d, l, i[m], a.chart, c, j, k, b),
						c.series.push(l)
					}
					if (this.isDual && a.lineset && a.lineset.length > 0) {
						m = 0;
						for (e = a.lineset.length; m < e; m += 1, k += 1) l = {
							data: [],
							yAxis: 1,
							type: "line"
						},
						d = a.lineset[m],
						j = Math.min(f.oriCatTmp.length, d.data && d.data.length),
						c.series.push(h.msline.point.call(this, "msline", l, d, a.chart, c, j, k))
					}
					this.configureAxis(c, a);
					a.trendlines && Fa(a.trendlines, c.yAxis, c[S], !1, this.isBar)
				}
			}
		},
		h.stackedcolumn2d);
		h("mscombi2d", {
			series: function(a, c, d) {
				var b,
				g,
				m,
				e,
				f = a.chart,
				k,
				l = [],
				j = [],
				i = [],
				R,
				p,
				Q = c[S],
				s = this.isDual;
				c.legend.enabled = Boolean(n(a.chart.showlegend, 1));
				if (a.dataset && a.dataset.length > 0) {
					this.categoryAdder(a, c);
					e = Q.oriCatTmp.length;
					b = 0;
					for (g = a.dataset.length; b < g; b += 1) {
						m = a.dataset[b];
						R = s && r(m.parentyaxis, "p").toLowerCase() === "s" ? !0: !1;
						k = {
							data: []
						};
						if (R) k.yAxis = 1;
						p = oa(m.renderas, J).toLowerCase();
						switch (p) {
						case "line":
							k.type = "line";
							l.push(h.msline.point.call(this, d, k, m, f, c, e, b));
							break;
						case "area":
							k.type = "area";
							c.chart.series2D3Dshift = !0;
							i.push(h.msarea.point.call(this, d, k, m, f, c, e, b));
							break;
						case "column":
							j.push(h.mscolumn2d.point.call(this, d, k, a.dataset[b], f, c, e, b));
							break;
						default:
							R ? (k.type = "line", l.push(h.msline.point.call(this, d, k, m, f, c, e, b))) : j.push(h.mscolumn2d.point.call(this, d, k, a.dataset[b], f, c, e, b))
						}
					}
					c.series = f.areaovercolumns !== "0" ? c.series.concat(j, i, l) : c.series.concat(i, j, l);
					if (j.length === 0) Q.hasNoColumn = !0;
					this.configureAxis(c, a);
					a.trendlines && Fa(a.trendlines, c.yAxis, c[S], s, this.isBar)
				}
			}
		},
		h.mscolumn2d);
		h("mscombi3d", {
			series: h.mscombi2d.series,
			eiMethods: "view2D,view3D,resetView,rotateView,getViewAngles,fitToStage"
		},
		h.mscolumn3d);
		h("mscolumnline3d", {},
		h.mscombi3d);
		h("stackedcolumn2dline", {
			isStacked: !0,
			stack100percent: 0
		},
		h.mscombi2d);
		h("stackedcolumn3dline", {
			isStacked: !0,
			stack100percent: 0
		},
		h.mscombi3d);
		h("mscombidy2d", {
			isDual: !0
		},
		h.mscombi2d);
		h("mscolumn3dlinedy", {
			isDual: !0
		},
		h.mscolumnline3d);
		h("stackedcolumn3dlinedy", {
			isDual: !0
		},
		h.stackedcolumn3dline);
		h("msstackedcolumn2dlinedy", {
			isDual: !0,
			stack100percent: 0
		},
		h.msstackedcolumn2d);
		h("scrollcolumn2d", {
			postSeriesAddition: h.scrollbase.postSeriesAddition,
			avgScrollPointWidth: 40
		},
		h.mscolumn2d);
		h("scrollline2d", {
			postSeriesAddition: h.scrollbase.postSeriesAddition,
			avgScrollPointWidth: 75
		},
		h.msline);
		h("scrollarea2d", {
			postSeriesAddition: h.scrollbase.postSeriesAddition,
			avgScrollPointWidth: 75
		},
		h.msarea);
		h("scrollstackedcolumn2d", {
			postSeriesAddition: function(a, c, d, b) {
				h.base.postSeriesAddition.call(this, a, c, d, b);
				h.scrollbase.postSeriesAddition.call(this, a, c, d, b)
			},
			avgScrollPointWidth: 75
		},
		h.stackedcolumn2d);
		h("scrollcombi2d", {
			postSeriesAddition: h.scrollbase.postSeriesAddition,
			avgScrollPointWidth: 40
		},
		h.mscombi2d);
		h("scrollcombidy2d", {
			postSeriesAddition: h.scrollbase.postSeriesAddition,
			avgScrollPointWidth: 40
		},
		h.mscombidy2d);
		h("scatter", {
			standaloneInit: !0,
			defaultSeriesType: "scatter",
			creditLabel: !0
		},
		h.scatterbase);
		h("bubble", {
			standaloneInit: !0,
			standaloneInut: !0,
			defaultSeriesType: "bubble",
			point: function(a, c, d, b, g, m, e) {
				if (d.data) {
					var f,
					k,
					l,
					j,
					i,
					R,
					p,
					Q,
					s,
					o,
					F = !1,
					q,
					W,
					a = h[a],
					m = d.data,
					C = m.length,
					B = n(d.showvalues, g[S].showValues);
					l = n(b.bubblescale, 1);
					var v = r(b.negativecolor, "FF0000"),
					u = g.plotOptions.bubble,
					D = this.numberFormatter,
					w = n(d.showregressionline, b.showregressionline, 0);
					u.bubbleScale = l;
					c.name = Z(d.seriesname);
					if (n(d.includeinlegend) === 0 || c.name === void 0) c.showInLegend = !1;
					l = Boolean(n(d.drawanchors, d.showanchors, b.drawanchors, 1));
					p = r(d.plotfillalpha, d.bubblefillalpha, b.plotfillalpha, ba);
					Q = n(d.showplotborder, b.showplotborder, 1);
					s = M(r(d.plotbordercolor, b.plotbordercolor, "666666"));
					f = r(d.plotborderthickness, b.plotborderthickness, 1);
					o = r(d.plotborderalpha, b.plotborderalpha, "95");
					Q = Q == 1 ? f: 0;
					e = r(d.color, d.plotfillcolor, b.plotfillcolor, g.colors[e % g.colors.length]);
					c.marker = {
						enabled: l,
						fillColor: this.getPointColor(e, ba),
						lineColor: {
							FCcolor: {
								color: s,
								alpha: o
							}
						},
						lineWidth: Q,
						symbol: "circle"
					};
					if (w) {
						c.events = {
							hide: this.hideRLine,
							show: this.showRLine
						};
						var H = {
							sumX: 0,
							sumY: 0,
							sumXY: 0,
							sumXsqure: 0,
							sumYsqure: 0,
							xValues: [],
							yValues: []
						},
						t = n(d.showyonx, b.showyonx, 1),
						I = M(r(d.regressionlinecolor, b.regressionlinecolor, e)),
						x = n(d.regressionlinethickness, b.regressionlinethickness, 1);
						f = wa(n(d.regressionlinealpha, b.regressionlinealpha, 100));
						I = X(I, f)
					}
					for (k = 0; k < C; k += 1) if (j = m[k]) if (f = D.getCleanValue(j.y), q = D.getCleanValue(j.x), W = D.getCleanValue(j.z, !0), f === null) c.data.push({
						y: null,
						x: q
					});
					else {
						F = !0;
						i = M(r(j.color, j.z < 0 ? v: e));
						R = r(j.alpha, p);
						j = a.getPointStub(j, f, q, g, d, B);
						i = n(b.use3dlighting) === 0 ? i: a.getPointColor(i, R);
						if (W !== null) u.zMax = u.zMax > W ? u.zMax: W,
						u.zMin = u.zMin < W ? u.zMin: W;
						c.data.push({
							y: f,
							x: q,
							z: W,
							displayValue: j.displayValue,
							toolText: j.toolText,
							link: j.link,
							marker: {
								enabled: l,
								fillColor: i,
								lineColor: {
									FCcolor: {
										color: s,
										alpha: o
									}
								},
								lineWidth: Q,
								symbol: "circle"
							}
						});
						this.pointValueWatcher(g, f, q, w && H)
					} else c.data.push({
						y: null
					});
					w && (d = {
						type: "line",
						color: I,
						showInLegend: !1,
						lineWidth: x,
						enableMouseTracking: !1,
						marker: {
							enabled: !1
						},
						data: this.getRegressionLineSeries(H, t, C),
						zIndex: 0
					},
					c = [c, d])
				}
				if (!F) c.showInLegend = !1;
				return c
			},
			postSeriesAddition: function(a, c) {
				a.chart.hasScroll = n(c.chart.clipbubbles, 1)
			},
			getPointStub: function(a, c, d, b, g, m) {
				var b = b[S],
				c = c === null ? c: b.numberFormatter.dataLabels(c),
				e,
				f = b.tooltipSepChar;
				b.showTooltip ? Z(a.tooltext) !== void 0 ? g = ja(a.tooltext) : c === null ? g = !1: (b.seriesNameInToolTip && (e = r(g && g.seriesname)), g = e ? e + f: J, g += d ? d + f: J, g += c, g += a.z ? f + a.z: J) : g = J;
				d = n(a.showvalue, m, b.showValues) ? r(a.name, a.label) !== void 0 ? ja(r(a.name, a.label)) : c: J;
				a = Z(a.link);
				return {
					displayValue: d,
					toolText: g,
					link: a
				}
			}
		},
		h.scatter);
		var Pa = function(a, c, d, b) {
			var u;
			var g = a.stepZoom,
			m = a.options.chart.stepZoom.skipOverlapPoints,
			e = g.zoomHistory,
			f = g.currentZoomLevelIndex,
			k,
			l = g.pixelsPerPoint,
			j = a.series,
			i = j.length,
			R = g.maxIndex,
			p,
			h,
			s,
			o;
			h = a.options._FCconf.visibleLabelDistance;
			var n;
			if (b < f) f = g.currentZoomLevelIndex = b || 0,
			e.splice(f + 1, e.length),
			e = e[f],
			l = e.stepping,
			a = e.seriesStart,
			d = e.perPointPixelDistance,
			b = e.scrollRatio,
			c = g.scrollPosition = e.scrollPosition,
			g.scrollablePXLength = e.scrollablePXLength;
			else {
				c > d && (n = c, c = d, d = n);
				k = a.plotWidth;
				a = d - c;
				d = k / a;
				n = d < h ? Math.ceil(h / d) : 1;
				l = d < l ? Math.ceil(l / d) : 1;
				d = k / (a - a % l);
				a = c % l;
				p = R - R % l;
				s = (p - a) * d;
				b = k / s;
				o = s - k;
				c = o > 0 ? (c - a) * d / (s - k) : 0;
				g.scrollPosition = c;
				g.scrollablePXLength = o;
				if ((k = e[f]) && k.stepping === l && k.seriesStart === a && k.seriesEnd === p && k.perPointPixelDistance === d) return;
				e[g.currentZoomLevelIndex = f += 1] = {
					seriesStart: a,
					seriesEnd: p,
					stepping: l,
					perPointPixelDistance: d,
					visiblePointDistance: l * d,
					seriesConf: [],
					scrollRatio: b,
					scrollPosition: c,
					scrollablePXLength: o
				}
			}
			var e = [],
			q,
			r;
			n === void 0 && (n = d < h ? Math.ceil(h / d) : 1);
			for (f = 0; f <= R; f += 1) {
				p = f - a;
				h = p * d;
				o = h + g.xDisplacement;
				k = p < 0 || p % l !== 0;
				s = (p = p < 0 || p % n !== 0) ? "hide": "show";
				p = k ? "hide": "show";
				if (q = g.catLabelArr[f]) q[s](),
				q.attr({
					x: o
				});
				for (o = 0; o < i; o += 1) if (q = j[o], s = q.data[f], s.plotX = h, u = e[o] || (e[o] = {
					path: [],
					addMove: !0,
					addLine: !1,
					lastMovePoint: [],
					connectNullData: q.options.connectNullData
				}), q = u, r = q.path, s.graphic && (s.graphic.attr({
					x: h
				}), s.graphic[p]()), s.dataLabel && s.dataLabel.attr && (s.dataLabel.attr({
					x: h
				}), s.dataLabel[p]()), s.tracker && s.tracker.attr && (s.tracker.attr({
					x: h
				}), s.tracker[p]()), !m || !k) if (qa(s && s.plotY)) {
					if (q.addLine) r.push(G, q.lastMovePoint[0], q.lastMovePoint[1], N),
					q.addLine = !1;
					q.addMove ? (q.addLine = !0, q.addMove = !1, q.lastMovePoint[0] = h, q.lastMovePoint[1] = s.plotY) : r.push(h, s.plotY)
				} else if (!q.connectNullData) q.addMove = !0,
				q.addLine = !1
			}
			for (o = 0; o < i; o += 1) q = e[o] || (e[o] = {
				path: [G],
				isLastMoveComand: !0
			}),
			r = q.path,
			j[o].graphLine.attr({
				d: r
			}),
			j[o].graphPath = r;
			g.scroller.setScrollRatio(b);
			g.scroller.setScrollPosition(c)
		},
		pb = function(a, c) {
			var d = c.zoomHistory[c.currentZoomLevelIndex],
			b = d.perPointPixelDistance,
			g = a.selectionWidth,
			m = c.maxIndex,
			d = d.scrollablePXLength * d.scrollPosition + a.selectionLeft,
			g = d + g,
			d = Math.floor(d / b),
			g = Math.ceil(g / b);
			g > m && (g = m);
			return {
				max: g,
				min: d
			}
		},
		qb = function(a, c) {
			var d = this.tracker.normalizeMouseEvent,
			b = this.options.chart.stepZoom,
			g = this.renderer,
			m = this.plotLeft,
			e = this.plotTop,
			f = this.plotWidth,
			k = this.plotHeight,
			l = b.pinPaneBorderThickness,
			j = g.clipRect(m + a, e, c, k),
			i,
			R,
			p = [],
			h = 0;
			i = g.g("group").attr({
				x: 0,
				y: 0,
				zIndex: 2
			}).clip(j).add();
			R = g.rect(m + a, e - l / 2, c, k + l, 0).attr({
				stroke: b.pinPaneBorderColor,
				fill: b.pinPaneBgColor,
				strokeWidth: l
			}).css({
				cursor: "w-resize"
			}).add(i);
			ia(this.series,
			function(a) {
				var d = a.options,
				c = d.color,
				d = ka(d.lineWidth + b.pinLineThicknessDelta, 1),
				c = g.path(a.graphPath).attr({
					stroke: c,
					"stroke-width": d,
					"stroke-linecap": "round",
					dashstyle: Sa && !ea ? pa(d + 1, d, d) : pa(d, d + 1, d),
					visibility: a.visible ? ma: "hidden"
				});
				p.push(c);
				c.translate(a.group.attr("translateX"), e).add(i)
			});
			va(R.element, "dragstart drag",
			function(b) {
				b = d(b);
				if (b.type === "dragstart") h = b.pageX - (i.attr("translateX") || 0);
				else {
					var b = b.pageX - h,
					e = b + a;
					e < 0 ? b = -a: e + c > f && (b = f - c - a);
					i.translate(b)
				}
			});
			return {
				destroy: function() {
					ia(p,
					function(a) {
						a.destroy()
					});
					R.destroy();
					i.destroy()
				}
			}
		},
		rb = function(a) {
			var c = this,
			d = c.stepZoom,
			b = c.options.chart.stepZoom,
			g = a.selectionLeft,
			m = pb(a, d);
			if (d.pinActive) d.pinComposite && d.pinComposite.destroy(),
			d.pinComposite = qb.call(c, g, a.selectionWidth, m, d);
			else {
				m.max > m.min && Pa(c, m.min, m.max);
				a = d.currentZoomLevelIndex;
				if (!d.zoButton) d.zoButton = c.addButton({
					onclick: function() {
						var a = d.currentZoomLevelIndex - 1;
						Pa(c, void 0, void 0, a);
						d.pinComposite && (d.pinComposite = d.pinComposite.destroy());
						d.pinButton && d.pinButton.activate(!1);
						d.pinActive = !1;
						a <= 1 && d.resetButton.hide();
						d.currentZoomLevelIndex == 0 && d.zoButton.hide()
					},
					tooltip: b.showToolBarButtonTooltext && b.btnZoomOutTooltext,
					symbol: "zoomOutIcon"
				});
				d.zoButton[a === 0 ? "hide": "show"]();
				if (!d.resetButton) d.resetButton = c.addButton({
					onclick: function() {
						Pa(c, void 0, void 0, 0);
						d.resetButton && d.resetButton.hide();
						d.zoButton && d.zoButton.hide();
						d.pinComposite && (d.pinComposite = d.pinComposite.destroy());
						d.pinButton && d.pinButton.activate(!1);
						d.pinActive = !1
					},
					tooltip: b.showToolBarButtonTooltext && b.btnResetChartTooltext,
					symbol: "resetIcon",
					symbolFill: "none",
					hoverSymbolFill: "none"
				});
				d.resetButton[c.stepZoom.currentZoomLevelIndex > 1 ? "show": "hide"]()
			}
		};
		h("zoomline", {
			standaloneInit: !0,
			hasVDivLine: !0,
			defaultSeriesType: "stepzoom",
			canvasborderthickness: 1,
			chart: function() {
				var a = this.dataObj.chart,
				c = this.base.chart.apply(this, arguments),
				d = c.chart.stepZoom; ! Z(a.caption) && !Z(a.subcaption) && (c.chart.marginTop += 15);
				c.chart.animation = !1; (c.plotOptions || (c.plotOptions = {})) && (c.plotOptions.series || (c.plotOptions.series = {}));
				c.plotOptions.series.animation = !1;
				c.chart.nativeZoom = !1;
				c.chart.events.selection = rb;
				if (!c.callbacks) c.callbacks = [];
				c.callbacks.push(function() {
					var a = this.stepZoom,
					c = a.pinButton;
					if (!c && this.options.chart.stepZoom.allowPinMode) c = a.pinButton = this.addButton({
						onclick: function() {
							if (a.pinActive = !a.pinActive) c.tooltipOptions.point.toolText = d.showToolBarButtonTooltext && "Switch to Zoom Mode";
							else {
								if (a.pinComposite) a.pinComposite = a.pinComposite.destroy();
								c.tooltipOptions.point.toolText = d.showToolBarButtonTooltext && d.btnSwitchToPinModeTooltext
							}
							c.activate(a.pinActive)
						},
						tooltip: d.showToolBarButtonTooltext && d.btnSwitchToPinModeTooltext,
						symbol: "pinModeIcon"
					})
				});
				return c
			},
			xAxisMinMaxSetter: function(a) {
				this.base.xAxisMinMaxSetter.apply(this, arguments);
				var c = a.xAxis,
				d = a[S].x;
				c.min = 0;
				c.max = d.catCount - 1
			},
			series: function(a, c, d) {
				var b,
				g,
				m = c[S],
				e;
				b = a.chart;
				n(b.compactdatamode, 0);
				c.legend.enabled = Boolean(n(b.showlegend, 1));
				c.chart.valuePosition = r(b.valueposition, "auto").toLowerCase();
				if (a.dataset && a.dataset.length > 0) {
					a.categories && a.categories[0] && a.categories[0].category && this.categoryAdder(a, c);
					b = 0;
					for (g = a.dataset.length; b < g; b += 1) if (a.dataset[b].data) e = {
						data: []
					},
					e = this.point(d, e, a.dataset[b], a.chart, c, m.oriCatTmp.length, b),
					e instanceof Array ? c.series = c.series.concat(e) : c.series.push(e),
					e = !0;
					e && (this.configureAxis(c, a), a.trendlines && !this.isLog && Fa(a.trendlines, c.yAxis, m, !1, this.isBar))
				}
			},
			point: function(a, c, d, b, g, m, e) {
				var f,
				k,
				l,
				j,
				i,
				R,
				p,
				h,
				s,
				o,
				F,
				q,
				W,
				C,
				B,
				v,
				u,
				D,
				w = d.data,
				H = g[S],
				a = r(c.type, this.defaultSeriesType),
				t = g.plotOptions[a] && g.plotOptions[a].stacking,
				I = r(this.isValueAbs, H.isValueAbs, !1);
				n(d.showvalues, H.showValues);
				var H = n(c.yAxis, 0),
				x = this.numberFormatter;
				D = n(b.showshadow, 1);
				h = n(b.compactdatamode, 0);
				u = r(b.dataseparator, "|");
				f = r(d.seriesname, J);
				k = M(r(d.color, b.linecolor, g.colors[e % g.colors.length]));
				l = r(d.alpha, b.linealpha, ba);
				j = n(d.linethickness, b.linethickness, 2);
				i = Boolean(n(d.dashed, b.linedashed, 0));
				R = n(d.linedashlen, b.linedashlen, 5);
				p = n(d.linedashgap, b.linedashgap, 4);
				n(d.includeinlegend, 1);
				e = n(d.showvalues, b.showvalues);
				s = n(d.drawanchors, d.showanchors, b.drawanchors, b.showanchors);
				o = n(d.anchorsides, b.anchorsides, 0);
				F = n(d.anchorradius, b.anchorradius, 3);
				q = M(r(d.anchorbordercolor, b.anchorbordercolor, k));
				W = n(d.anchorborderthickness, b.anchorborderthickness, 1);
				C = M(r(d.anchorbgcolor, b.anchorbgcolor, k));
				B = r(d.anchoralpha, b.anchoralpha, ba);
				b = r(d.anchorbgalpha, b.anchorbgalpha, B);
				c.marker = {
					enabled: s === void 0 ? l != 0: !!s,
					fillColor: {
						FCcolor: {
							color: C,
							alpha: b * B / 100 + J
						}
					},
					lineColor: {
						FCcolor: {
							color: q,
							alpha: B + J
						}
					},
					lineWidth: W,
					radius: F,
					symbol: Xa(o)
				};
				c.name = f;
				c.color = {
					FCcolor: {
						color: k,
						alpha: l
					}
				};
				c.shadow = {
					opacity: D ? l / 100: 0
				};
				c.lineWidth = j;
				c.dashStyle = i ? pa(R, p, j) : void 0;
				if (n(d.includeinlegend) === 0 || c.name === void 0 || l == 0 && s !== 1) c.showInLegend = !1;
				if (w) if (h) {
					w = w.split(u);
					for (d = 0; d < m; d += 1) f = x.getCleanValue(w[d]),
					f === null ? c.data.push({
						y: null
					}) : (v = !0, h = x.dataLabels(f), j = e ? h: J, c.data.push({
						y: f,
						displayValue: j,
						toolText: h
					}), this.pointValueWatcher(g, f, H, t, d, 0, a))
				} else for (d = 0; d < m; d += 1)(h = w[d]) ? (f = x.getCleanValue(h.value, I), f === null ? c.data.push({
					y: null
				}) : (v = !0, n(h.anchorsides, o), n(h.anchorradius, F), M(r(h.anchorbordercolor, q)), n(h.anchorborderthickness, W), M(r(h.anchorbgcolor, C)), r(h.anchoralpha, B), r(h.anchorbgalpha, b), u = M(r(h.color, k)), D = r(h.alpha, l), h = Z(h.tooltext, x.dataLabels(f)), j = e ? h: J, c.data.push({
					displayValue: j,
					toolText: h,
					y: f,
					color: {
						FCcolor: {
							color: u,
							alpha: D
						}
					}
				}), this.pointValueWatcher(g, f, H, t, d, 0, a))) : c.data.push({
					y: null
				});
				if (!v) c.showInLegend = !1;
				return c
			},
			categoryAdder: function(a, c) {
				var d,
				b = 0,
				g,
				m = c[S],
				e = m.axisGridManager,
				f = c.xAxis,
				k,
				l = m.x,
				j = a.chart,
				i = c.chart,
				h = n(j.showlabels, 1);
				i.zoomType = "x";
				f.maxZoom = 2;
				g = n(j.pixelsperpoint, 15);
				g <= 0 && (g = 15);
				m.pixelsperpoint = g;
				if (a.categories && a.categories[0] && a.categories[0].category) {
					if (a.categories[0].font) c.xAxis.labels.style.fontFamily = a.categories[0].font;
					if ((g = n(a.categories[0].fontsize)) !== void 0) g < 1 && (g = 1),
					c.xAxis.labels.style.fontSize = g + Oa,
					La(c.xAxis.labels.style);
					if (a.categories[0].fontcolor) c.xAxis.labels.style.color = a.categories[0].fontcolor.split(y)[0].replace(/^\#?/, "#");
					g = c[S].oriCatTmp;
					var p = a.categories[0].category;
					d = n(j.compactdatamode, 0);
					k = r(j.dataseparator, "|");
					if (d) {
						e = p.split(k);
						for (d = 0; d < e.length; d += 1) k = ja(oa(e[d], e[d].name)),
						g[b] = k,
						b += 1
					} else for (d = 0; d < p.length; d += 1) p[d].vline ? e.addVline(f, p[d], b) : (k = p[d].showlabel === "0" ? J: ja(oa(a.categories[0].category[d].label, a.categories[0].category[d].name)), g[b] = oa(ja(a.categories[0].category[d].tooltext), k), b += 1);
					if (h) f.categories = g
				}
				f = b - 1 || 1;
				m.displayStartIndex = n(j.displaystartindex, 0);
				m.displayEndIndex = n(j.displayendindex, f);
				if (m.displayStartIndex < 0 || m.displayStartIndex >= f) m.displayStartIndex = 0;
				if (m.displayEndIndex <= m.displayStartIndex || m.displayEndIndex > f) m.displayEndIndex = f;
				l.catCount = b;
				i.hasScroll = !0;
				b = i.stepZoom = {};
				b.pixelsperpoint = m.pixelsperpoint;
				b.displayStartIndex = m.displayStartIndex;
				b.displayEndIndex = m.displayEndIndex;
				b.scrollColor = M(r(j.scrollcolor, Y.altHGridColor[c.chart.paletteIndex]));
				b.scrollHeight = n(j.scrollheight, 16);
				b.scrollPadding = n(j.scrollpadding, c.chart.plotBorderWidth);
				b.scrollBtnWidth = n(j.scrollbtnwidth, j.scrollheight, 16);
				b.scrollBtnPadding = n(j.scrollbtnpadding, 0);
				m.marginBottomExtraSpace += b.scrollPadding + b.scrollHeight
			},
			postSeriesAddition: function(a, c) {
				var d = c.chart,
				b = a.chart.stepZoom,
				g = Y.canvasBorderColor[this.paletteIndex];
				if (b) b.allowPinMode = n(d.allowpinmode, 1),
				b.skipOverlapPoints = !!n(d.skipoverlappoints, 1),
				b.showToolBarButtonTooltext = n(d.showtoolbarbuttontooltext, 1),
				b.btnResetChartTooltext = r(d.btnresetcharttooltext, "Reset Zoom"),
				b.btnZoomOutTooltext = r(d.btnzoomouttooltext, "Zoom out one level"),
				b.btnSwitchToZoomModeTooltext = r(d.btnswitchtozoommodetooltext, "Select a subset of data to zoom into it for detailed view"),
				b.btnSwitchToPinModeTooltext = r(d.btnswitchtopinmodetooltext, "Switch to Pin Mode"),
				b.pinLineThicknessDelta = n(d.pinlinethicknessdelta, 0),
				b.pinPaneBorderThickness = n(d.pinpaneborderthickness, 1),
				b.pinPaneBorderColor = X(r(d.pinpanebordercolor, g), n(d.pinpaneborderalpha, 15)),
				b.pinPaneBgColor = X(r(d.pinpanebgcolor, g), n(d.pinpanebgalpha, 15))
			},
			placeHorizontalAxis: function(a, c, d, b, g, m, e) {
				var f = d[S],
				k,
				l,
				j,
				i,
				h,
				p,
				r,
				s,
				o = 0,
				F = 0,
				q = 10,
				W = 1,
				C = 0,
				B = 0,
				v = !1,
				u = !1,
				D = !1;
				j = n(b.chart.labelstep, 0);
				s = c.labelDisplay;
				var w = c.rotateLabels,
				H = c.horizontalLabelPadding,
				t = f.marginBottomExtraSpace,
				I = d.chart.marginLeft;
				k = d.chart.marginRight;
				var x = f.smartLabel,
				y = c.slantLabels,
				E = g / (a.max - a.min),
				A = 0,
				G = 0,
				B = {
					w: 0,
					h: 0
				};
				if (a.labels.style) h = a.labels.style,
				x.setStyle(h),
				l = x.getOriSize("W"),
				q = l.height,
				p = l.width + 4,
				r = x.getOriSize("WWW").width + 4;
				var N,
				z,
				O = [],
				K = [];
				l = l = 0;
				var P,
				L,
				T = c.horizontalAxisNamePadding;
				z = 0;
				var c = c.staggerLines,
				M = A;
				if (a.title && a.title.text != J) h = a.title.style,
				x.setStyle(h),
				C = x.getOriSize("W").height,
				a.title.rotation = 0,
				l = x.getSmartText(a.title.text, g, m),
				F = l.height;
				parseInt(b.chart.chartleftmargin, 10);
				parseInt(b.chart.chartrightmargin, 10);
				z = g - e;
				switch (s) {
				case "none":
					v = D = !0;
					w && (o = y ? 300: 270, l = q, q = p, p = l, v = !0);
					break;
				case "rotate":
					o = y ? 300: 270;
					l = q;
					q = p;
					p = l;
					v = !0;
					break;
				case "stagger":
					u = v = !0;
					b = Math.floor((m - C) / q);
					b < c && (c = b);
					break;
				default:
					w && (o = y ? 300: 270, l = q, q = p, p = l)
				}
				w = 0;
				e = a.plotLines;
				for (b = e.length; w < b; w += 1)(l = e[w]) && l.label && typeof l.label.text !== Za && K.push(l);
				e = a.plotBands;
				w = 0;
				for (b = e.length; w < b; w += 1)(l = e[w]) && l.label && typeof l.label.text !== Za && K.push(l);
				e = a.categories || [];
				w = 0;
				for (b = e.length; w < b; w += 1) O.push({
					value: w,
					label: {
						text: e[w]
					}
				});
				w = O.length - 1;
				b = O.length;
				u && (c > b ? c = b: c < 2 && (c = 2));
				if (b) {
					a.scroll && a.scroll.viewPortMin && a.scroll.viewPortMax ? (N = a.scroll.viewPortMin, l = a.scroll.viewPortMax) : (N = a.min, l = a.max);
					P = f.width * 0.08;
					L = (O[0].value - N) * E;
					N = (l - O[w].value) * E;
					f.maxLabelWidth = P;
					f.visibleLabelDistance = f.width * 0.1;
					if (s === "auto") {
						if (P > E && P < r) y ? o = 300: (o = 270, f.visibleLabelDistance = f.width * 0.07, f.maxLabelWidth = q),
						l = q,
						q = p,
						p = l,
						v = !0
					} else if (s === "rotate") {
						if (!y) f.visibleLabelDistance = f.width * 0.07,
						f.maxLabelWidth = q
					} else s === "stagger" && (P *= c);
					r = (L + I) * 2;
					if (s = e[0]) a.labels.style && x.setStyle(a.labels.style),
					s = Math.min(P, x.getOriSize(s).width + 4),
					s > r && (l = (s - r) / 2, g -= l, z -= l, d.chart.marginLeft += l);
					r = (N + k) * 2;
					if (s = e[w]) a.labels.style && x.setStyle(a.labels.style),
					s = Math.min(P, x.getOriSize(i).width + 4),
					s > r && (l = (s - r) / 2, g -= l, z -= l, d.chart.marginRight += l);
					D || (j ? (P *= j, P = Math.max(P, p)) : (W = Math.ceil(p / P), P *= W));
					for (j = 0; j < b; j += 1) if (l = O[j], j % W && l.label) l.label.text = J;
					else if (l && l.label && Z(l.label.text) !== void 0) {
						i = l.label;
						if (i.style && i.style !== h) h = i.style,
						x.setStyle(h);
						if (o && D) k = x.getOriSize(i.text),
						B.w = ka(B.w, k.width + 4),
						B.h = ka(B.h, k.height);
						else if (!D) k = o || u ? x.getOriSize(i.text) : x.getSmartText(i.text, P - 4, m, v),
						B.w = Math.max(B.w, k.width + 4),
						B.h = Math.max(B.h, k.height)
					}
				}
				j = 0;
				for (b = K.length; j < b; j += 1) if ((l = K[j]) && l.label && Z(l.label.text) !== void 0) {
					i = l.label;
					if (i.style && i.style !== h) h = i.style,
					x.setStyle(h);
					k = x.getOriSize(i.text);
					i.verticalAlign === Ea ? A = ka(A, k.height) : G = ka(G, k.height)
				}
				a.scroll && a.scroll.enabled && !o && !D && (i = B.w / 2, d.chart.marginLeft < i && (j = i - d.chart.marginLeft, z > j && (g -= j, z -= j, d.chart.marginLeft += j)), d.chart.marginRight < i && (j = i - d.chart.marginRight, z > j && (g -= j, d.chart.marginRight += j)));
				if (D) {
					if (z = q, o) z = B.w
				} else z = o ? B.w: u ? c * q: B.h;
				z > 0 && (M += H + z);
				F > 0 && (M += F + T);
				i = G + M + 2;
				i > m && (i -= m, T > i ? (T -= i, i = 0) : (i -= T, T = 0, H > i ? (H -= i, i = 0) : (i -= H, H = 0)), G > i ? G -= i: (G > 0 && (i -= G, G = 0), i > 0 && (A > i ? A -= i: (A > 0 && (i -= A, A = 0), i > 0 && ((l = F - C) > i ? F -= i: (i -= l, F = C, i > 0 && ((l = z - q) > i ? z -= i: (i -= l, z = q, i > 0 && (i -= F + T, F = 0, i > 0 && (i -= z, z = 0, i > 0 && (H -= i)))))))))));
				H += t;
				C = z + H;
				m = f.is3d ? -d.chart.xDepth: 0;
				b = O.length;
				B = 0;
				o ? (q = P, P = z - 4, a.labels.rotation = o, a.labels.align = "right", a.labels.y = H - t + 4, a.labels.x = p / 2) : u ? P = P * c - 4: (q = z, P -= 4);
				for (j = 0; j < b; j += W) if ((l = O[j]) && l.label && Z(l.label.text) !== void 0) {
					i = l.label;
					if (i.style && i.style !== h) h = i.style,
					x.setStyle(h);
					if (!D) k = x.getSmartText(i.text, P, q, v),
					a.categories[j] = k.text;
					B += 1
				}
				b = K.length;
				for (j = o = p = 0; j < b; j += 1) if ((l = K[j].plotObj ? K[j].plotObj: K[j]) && l.label && Z(l.label.text) !== void 0) {
					i = l.label;
					if (i.style && i.style !== h) h = i.style,
					x.setStyle(h);
					i.verticalAlign === Ea ? (k = x.getSmartText(i.text, g, A, !0), o = Math.max(o, k.height), i.text = k.text, i.y = C + x.getOriSize("W").height, i.x = m) : (k = x.getSmartText(i.text, g, G, !0), p = Math.max(p, k.height), i.text = k.text, i.y = -(G - x.getOriSize("W").height + H + 2))
				}
				if (F > 0) x.setStyle(a.title.style),
				l = x.getSmartText(a.title.text, g, F),
				a.title.text = l.text,
				a.title.margin = C + o + T;
				M = o;
				if (z > 0) f.horizontalAxisHeight = H + z - t,
				M += f.horizontalAxisHeight;
				F > 0 && (M += F + T);
				d.chart.marginBottom += M;
				p > 0 && (d.chart.marginTop += p, M += p);
				return M
			},
			creditLabel: !0,
			defaultPlotShadow: 1
		},
		h.msline);
		h("ssgrid", {
			standaloneInit: !0,
			defaultSeriesType: "ssgrid",
			chart: function() {
				var a = this.containerElement,
				c = this.dataObj,
				d = this.chartInstance,
				c = Ga({},
				c);
				c.chart = c.chart || c.graph || {};
				delete c.graph;
				var b,
				g,
				m,
				e = 0,
				f,
				k,
				l = [],
				j = c.chart,
				i = c.data,
				h = i && i.length,
				c = this.smartLabel,
				p = this.numberFormatter,
				Q = a.offsetHeight,
				s = a.offsetWidth,
				o = {},
				F = e = 0,
				e = (j.palette > 0 && j.palette < 6 ? j.palette: n(this.paletteIndex, 1)) - 1,
				a = {
					chart: {
						renderTo: a,
						ignoreHiddenSeries: !1,
						events: {},
						spacingTop: 0,
						spacingRight: 0,
						spacingBottom: 0,
						spacingLeft: 0,
						marginTop: 0,
						marginRight: 0,
						marginBottom: 0,
						marginLeft: 0,
						borderRadius: 0,
						borderColor: "#000000",
						borderWidth: 1,
						defaultSeriesType: "ssgrid",
						style: {
							fontFamily: r(j.basefont, "Verdana"),
							fontSize: Wa(j.basefontsize, 20) + Oa,
							color: r(j.basefontcolor, Y.baseFontColor[e]).replace(/^#?([a-f0-9]+)/ig, "#$1")
						},
						plotBackgroundColor: Ma
					},
					labels: {
						smartLabel: c
					},
					colors: ["AFD8F8", "F6BD0F", "8BBA00", "FF8E46", "008E8E", "D64646", "8E468E", "588526", "B3AA00", "008ED6", "9D080D", "A186BE", "CC6600", "FDC689", "ABA000", "F26D7D", "FFF200", "0054A6", "F7941C", "CC3300", "006600", "663300", "6DCFF6"],
					credits: {
						href: "http://www.CnbiSoft.com?BS=FCHSEvalMark",
						text: "CnbiSoft",
						enabled: this.creditLabel
					},
					legend: {
						enabled: !1
					},
					series: [],
					subtitle: {
						text: J
					},
					title: {
						text: J
					},
					tooltip: {
						enabled: !1
					},
					exporting: {
						buttons: {
							exportButton: {},
							printButton: {
								enabled: !1
							}
						}
					}
				},
				q = a.colors,
				t = a.colors.length,
				C = 0,
				B = f = g = 0,
				F = b = k = 0;
				g = d.jsVars.cfgStore;
				d = a.chart;
				La(a.chart.style);
				o.showPercentValues = n(g.showpercentvalues, j.showpercentvalues, 0);
				o.numberItemsPerPage = r(g.numberitemsperpage, j.numberitemsperpage);
				o.showShadow = n(g.showshadow, j.showshadow, 0);
				o.baseFont = r(g.basefont, j.basefont, "Verdana");
				m = Wa(g.basefontsize, j.basefontsize, 10);
				o.baseFontSize = m + Oa;
				o.baseFontColor = M(r(g.basefontcolor, j.basefontcolor, Y.baseFontColor[e]));
				o.alternateRowBgColor = M(r(g.alternaterowbgcolor, j.alternaterowbgcolor, Y.altHGridColor[e]));
				o.alternateRowBgAlpha = r(g.alternaterowbgalpha, j.alternaterowbgalpha, Y.altHGridAlpha[e]) + J;
				o.listRowDividerThickness = n(g.listrowdividerthickness, j.listrowdividerthickness, 1);
				o.listRowDividerColor = M(r(g.listrowdividercolor, j.listrowdividercolor, Y.borderColor[e]));
				o.listRowDividerAlpha = n(g.listrowdivideralpha, j.listrowdivideralpha, Y.altHGridAlpha[e]) + 15 + J;
				o.colorBoxWidth = n(g.colorboxwidth, j.colorboxwidth, 8);
				o.colorBoxHeight = n(g.colorboxheight, j.colorboxheight, 8);
				o.navButtonRadius = n(g.navbuttonradius, j.navbuttonradius, 7);
				o.navButtonColor = M(r(g.navbuttoncolor, j.navbuttoncolor, Y.canvasBorderColor[e]));
				o.navButtonHoverColor = M(r(g.navbuttonhovercolor, j.navbuttonhovercolor, Y.altHGridColor[e]));
				o.textVerticalPadding = n(g.textverticalpadding, j.textverticalpadding, 3);
				o.navButtonPadding = n(g.navbuttonpadding, j.navbuttonpadding, 5);
				o.colorBoxPadding = n(g.colorboxpadding, j.colorboxpadding, 10);
				o.valueColumnPadding = n(g.valuecolumnpadding, j.valuecolumnpadding, 10);
				o.nameColumnPadding = n(g.namecolumnpadding, j.namecolumnpadding, 5);
				o.borderThickness = n(g.borderthickness, j.borderthickness, 1);
				o.borderColor = M(r(g.bordercolor, j.bordercolor, Y.borderColor[e]));
				o.borderAlpha = r(g.borderalpha, j.borderalpha, Y.borderAlpha[e]) + J;
				o.bgColor = r(g.bgcolor, j.bgcolor, "FFFFFF");
				o.bgAlpha = r(g.bgalpha, j.bgalpha, ba);
				o.bgRatio = r(g.bgratio, j.bgratio, ba);
				o.bgAngle = r(g.bgangle, j.bgangle, ga);
				d.borderRadius = o.borderThickness / 16;
				d.borderWidth = o.borderThickness;
				d.borderColor = {
					FCcolor: {
						color: o.borderColor,
						alpha: o.borderAlpha
					}
				};
				d.backgroundColor = {
					FCcolor: {
						color: o.bgColor,
						alpha: o.bgAlpha,
						ratio: o.bgRatio,
						angle: o.bgAngle
					}
				};
				m = {
					fontFamily: o.baseFont,
					fontSize: o.baseFontSize,
					color: o.baseFontColor
				};
				La(m);
				c.setStyle(m);
				for (e = 0; e < h; e += 1) if (b = i[e], f = p.getCleanValue(b.value), k = ja(oa(b.label, b.name)), g = M(r(b.color, q[e % t])), r(b.alpha, j.plotfillalpha, ba), k != J || f != null) l.push({
					value: f,
					label: k,
					color: g
				}),
				C += f,
				F += 1;
				for (e = 0; e < F; e += 1) b = l[e],
				f = b.value,
				b.dataLabel = b.label,
				b.displayValue = o.showPercentValues ? p.percentValue(f / C * 100) : p.dataLabels(f),
				i = c.getOriSize(b.displayValue),
				B = Math.max(B, i.width + o.valueColumnPadding);
				o.numberItemsPerPage ? o.numberItemsPerPage >= F ? (o.numberItemsPerPage = F, f = Q / o.numberItemsPerPage, g = F) : (p = Q, p -= 2 * (o.navButtonPadding + o.navButtonRadius), g = o.numberItemsPerPage, f = p / g) : (e = parseInt(m.lineHeight, 10), e += 2 * o.textVerticalPadding, e = Math.max(e, o.colorBoxHeight), Q / e >= F ? (f = Q / F, g = F) : (p = Q, p -= 2 * (o.navButtonPadding + o.navButtonRadius), g = Math.floor(p / e), f = p / g));
				k = s - o.colorBoxPadding - o.colorBoxWidth - o.nameColumnPadding - B - o.valueColumnPadding;
				b = o.colorBoxPadding +
				o.colorBoxWidth + o.nameColumnPadding;
				d.height = Q;
				d.width = s;
				d.rowHeight = f;
				d.labelX = b;
				d.colorBoxWidth = o.colorBoxWidth;
				d.colorBoxHeight = o.colorBoxHeight;
				d.colorBoxX = o.colorBoxPadding;
				d.valueX = o.colorBoxPadding + o.colorBoxWidth + o.nameColumnPadding + k + o.valueColumnPadding;
				d.valueColumnPadding = o.valueColumnPadding;
				d.textStyle = m;
				d.listRowDividerAttr = {
					"stroke-width": o.listRowDividerThickness,
					stroke: {
						FCcolor: {
							color: o.listRowDividerColor,
							alpha: o.listRowDividerAlpha
						}
					}
				};
				d.alternateRowColor = {
					FCcolor: {
						color: o.alternateRowBgColor,
						alpha: o.alternateRowBgAlpha
					}
				};
				d.navButtonRadius = o.navButtonRadius;
				d.navButtonPadding = o.navButtonPadding;
				d.navButtonColor = o.navButtonColor;
				d.navButtonHoverColor = o.navButtonHoverColor;
				d.lineHeight = parseInt(m.lineHeight, 10);
				Q = [];
				o = 0;
				p = !0;
				for (e = 0; e < F & g != 0; e += 1) e % g == 0 && (Q.push({
					data: [],
					visible: p
				}), p = !1, o += 1),
				b = l[e],
				Q[o - 1].data.push({
					label: c.getSmartText(b.dataLabel, k, f).text,
					displayValue: b.displayValue,
					y: b.value,
					color: b.color
				});
				a.series = Q;
				a.exporting.enabled = j.exportenabled == "1" ? !0: !1;
				a.exporting.buttons.exportButton.enabled = j.exportshowmenuitem == "0" ? !1: !0;
				a.exporting.filename = j.exportfilename ? j.exportfilename: "CnbiSoft";
				a.exporting.width = s;
				return a
			},
			creditLabel: !0
		},
		h.base);
		Ba.stepzoom = Ta(Ba.line, {
			states: {
				hover: {}
			}
		});
		var sb = function(a, c, d) {
			a <= 0.01 && (a = 0);
			var b = this.stepZoom,
			c = this.series,
			g = this.plotWidth,
			m = this.options._FCconf.clipExcessWidth,
			e = g / 2,
			f = c.length,
			a = n(a, b.scrollPosition, 0);
			a *= b.scrollablePXLength;
			var k,
			l,
			j,
			i,
			h,
			p = this.plotLeft - a;
			b.catGroup.attr("translateX", p);
			this.trackerGroup.attr("translateX", p);
			b.catClipRect.attr("x", a - m / 2);
			this.clipRect && this.clipRect.attr("x", a);
			for (m = 0; m < f; m += 1) if (k = c[m], k.group && k.group.attr("translateX", p), k.dataLabelsGroup && k.dataLabelsGroup.attr("translateX", p), k.clipRect && k.clipRect.attr("x", a), d) {
				b = fa.min(20, e);
				j = k.data;
				l = j.length;
				for (h = 0; h < l; h += 1) i = j[h],
				i.y !== null && i.tooltipPos && (k = i.plotX - a, k >= 0 && k <= e ? k += b: k > e && k <= g && (k -= b), i.tooltipPos[0] = k)
			}
		},
		t = L.extendClass(na.line, {
			type: "stepzoom",
			translate: function() {
				for (var a = this.chart, c = this.options.stacking, d = this.xAxis.categories, b = this.yAxis, g = this.data, m = g.length; m--;) {
					var e = g[m],
					f = e.x,
					k = e.y,
					l = e.low,
					j = b.stacks[(k < 0 ? "-": "") + this.stackKey];
					e.plotX = this.xAxis.translate(f);
					if (c && j && j[f]) {
						var f = j[f],
						j = f.total,
						i = b.options.min,
						l = f.cum;
						f.cum += k;
						k = ka(i, l + k);
						l = ka(i, l);
						c === "percent" && (l = j ? l * 100 / j: 0, k = j ? k * 100 / j: 0);
						e.percentage = j ? e.y * 100 / j: 0;
						e.stackTotal = j
					}
					if (qa(l)) e.yBottom = b.translate(l, 0, 1, 0, 1);
					if (k !== null) e.plotY = b.translate(k, 0, 1, 0, 1);
					e.clientX = a.inverted ? a.plotHeight - e.plotX: e.plotX;
					e.category = d && d[e.x] !== Ia ? d[e.x] : e.x
				}
			},
			drawPoints: function() {
				var a,
				c = this.data,
				d = this.chart,
				b,
				g,
				m,
				e,
				f,
				k,
				l,
				j;
				a = d.stepZoom.zoomHistory[d.stepZoom.currentZoomLevelIndex];
				var i = a.perPointPixelDistance,
				h = a.stepping,
				p = a.seriesStart,
				n,
				s = this.options.marker.enabled;
				for (m = c.length; m--;) if (e = c[m], n = m - p, b = e.plotX = n * i, g = e.plotY, j = e.graphic, s && g !== Ia && !isNaN(g)) a = e.pointAttr[e.selected ? "select": ""],
				l = a.r,
				f = b + 20,
				k = g - 15,
				f = f < 0 ? 0: f,
				k = k < 0 ? 0: k,
				e.tooltipPos = [f, k],
				j ? j.animate({
					x: b,
					y: g,
					r: l
				}) : e.graphic = d.renderer.symbol(za(e.marker && e.marker.symbol, this.symbol), b, g, l).attr(a).add(this.group),
				(n < 0 || n % h !== 0) && e.graphic.hide()
			},
			drawGraph: function() {
				for (var a = this.options, c = this.chart, d = [], b = this.group, g = a.lineColor || this.color, m = a.lineWidth, e = a.dashStyle, f = c.renderer, k = this.data, l = a.connectNullData, j = c.stepZoom.zoomHistory[c.stepZoom.currentZoomLevelIndex], i, h = 0, p = [], n = !0, s, o = (c.options.chart && c.options.chart.stepZoom).skipOverlapPoints ? j.stepping: 1, c = j.seriesStart; c < k.length; c += o, h += j.visiblePointDistance) i = k[c],
				qa(i && i.plotY) ? (s && (d.push(G, p[0], p[1], N), s = !1), n ? (s = !0, n = !1, p[0] = h, p[1] = i.plotY) : d.push(h, i.plotY)) : l || (n = !0, s = !1);
				this.graphPath = d;
				this.singlePoints = [];
				k = this.graphLine;
				g = {
					stroke: g,
					"stroke-width": m,
					"stroke-linecap": "round",
					dashstyle: e
				};
				k ? this.graphLine.animate({
					d: d
				}) : this.graphLine = f.path(d).attr(g).add(b).shadow(a.shadow, this.shadowGroup, a.shadow)
			},
			drawDataLabels: function() {
				if (this.options.dataLabels.enabled) {
					var a,
					c,
					d = this.data,
					b = this.options.dataLabels,
					g = this.dataLabelsGroup,
					m = this.chart,
					e = m.renderer,
					f = m.options.chart,
					k = b.y === null,
					l = m.plotHeight,
					j,
					i = m.stepZoom.zoomHistory[m.stepZoom.currentZoomLevelIndex],
					h = i.stepping,
					p = i.seriesStart,
					r,
					s = this.type == "floatedcolumn",
					o = b.style,
					F = parseInt(o.fontSize, 10),
					i = m.stepZoom,
					i = m.plotLeft - i.scrollPosition * i.scrollablePXLength,
					q = f.valuePadding,
					t = f.valuePosition,
					C;
					b.rotation = f.rotateValues == 1 ? 270: void 0;
					if (!g) g = this.dataLabelsGroup = e.g("data-labels").attr({
						visibility: this.visible ? ma: "hidden",
						zIndex: 6
					}).translate(i, m.plotTop).add(),
					m.options.chart.hasScroll && g.clip(this.clipRect);
					m = b.color;
					m === "auto" && (m = null);
					o.color = za(m, this.color);
					ia(d,
					function(f, i) {
						r = i - p;
						var m = f.plotX != null ? f.plotX: -999,
						D = za(f.plotY, -999),
						w = f.dataLabel,
						H = b.align,
						y = (k ? f.y >= 0 ? -6: 12: b.y) - q;
						j = b.formatter.call(f.getLabelConfig());
						if (j != null) {
							s && (D = n(f.barY, D));
							a = m + b.x;
							c = D + y;
							switch (t) {
							case "above":
								c = D + y;
								break;
							case "below":
								c = D - y + F;
								break;
							default:
								C = d[i - 1],
								c = D + ((C && C.plotY) < f.plotY ? -y + F: y)
							}
							c > l && (c = D + y);
							c < F && (c = D - y + F);
							if (w) w.attr({
								text: j
							}).animate({
								x: a,
								y: c
							});
							else if (qa(j)) w = f.dataLabel = e.text(j, a, c).attr({
								align: H,
								rotation: b.rotation,
								zIndex: 1
							}).css(o).add(g); (r < 0 || r % h !== 0) && w && w.hide && w.hide()
						}
					})
				}
			},
			drawTracker: function() {
				var a = this,
				c = a.chart,
				d = +new Date,
				b,
				g,
				m = c.renderer,
				e,
				f = c.stepZoom.zoomHistory[c.stepZoom.currentZoomLevelIndex],
				k = f.stepping,
				l = f.seriesStart,
				j;
				c.options.chart.hasScroll && c.trackerGroup.clip(a.clipRect);
				ia(a.data,
				function(f, h) {
					if (f.y !== null) {
						j = h - l;
						if (f.link !== void 0) var p = {
							cursor: "pointer",
							_cursor: "hand"
						};
						b = f.pointAttr[f.selected ? "select": ""];
						g = b.r + 3;
						f.tracker = m.circle(f.plotX, f.plotY, g).attr({
							fill: fb
						}).on(Ra ? "touchstart": "mouseover",
						function(b) {
							e = b.relatedTarget || b.fromElement;
							if (c.hoverSeries !== a && Aa(e, "isTracker") !== d) a.onMouseOver();
							f.onMouseOver()
						}).on("mouseout",
						function(b) {
							if (!a.options.stickyTracking && (e = b.relatedTarget || b.toElement, Aa(e, "isTracker") !== d)) a.onMouseOut()
						}).css(p).add(c.trackerGroup); (j < 0 || j % k !== 0) && f.tracker && f.tracker.hide && f.tracker.hide()
					}
				})
			},
			render: function() {
				var a = this,
				c = a.chart,
				d = c.renderer,
				b = c.options.chart,
				g = c.options._FCconf,
				m = a.data,
				e;
				if (!c.stepZoom) {
					var f = m.length - 1,
					k,
					l = b.stepZoom,
					j = n(l.pixelsperpoint, 30),
					i = n(l.displayStartIndex, 0),
					h = n(l.displayEndIndex, f),
					p = c.plotWidth,
					r = c.plotLeft,
					s = l.scrollHeight,
					o = c.plotHeight + c.plotTop + n(l.scrollPadding, 0),
					F,
					q,
					t;
					q = h - i;
					var m = p / q,
					C,
					B;
					C = g.maxLabelWidth;
					B = g.visibleLabelDistance;
					B = m < B ? Math.ceil(B / m) : 1;
					F = m < j ? Math.ceil(j / m) : 1;
					m = p / (q - q % F);
					C = g.clipExcessWidth = C;
					g = i % F;
					k = f - f % F || 1;
					q = (k - g) * m;
					t = p / q;
					e = q - p;
					q = e > 0 ? (i - g) * m / (q - p) : 0;
					b = b.plotBorderWidth;
					b = d.scroller(r - b, o, p + b + b, s, !0, {
						size: l.scrollBtnWidth,
						padding: l.scrollBtnPadding
					},
					!1).attr({
						fill: l.scrollColor
					}).setScrollRatio(t).callback(function(a, b, d) {
						sb.call(c, a, b, d)
					}).add(c.seriesGroup);
					c.stepZoom = {
						zoomHistory: [{
							seriesStart: g,
							seriesEnd: k,
							stepping: F,
							perPointPixelDistance: m,
							visiblePointDistance: F * m,
							seriesConf: [],
							scrollRatio: t,
							scrollPosition: q,
							scrollablePXLength: e
						}],
						currentZoomLevelIndex: 0,
						pixelsPerPoint: j,
						displayStartIndex: i,
						displayEndIndex: h,
						scrollRatio: 1,
						maxIndex: f,
						scrollPosition: q,
						scrollablePXLength: e,
						scroller: b
					};
					j = a.xAxis;
					f = j.categories;
					l = j.options.labels;
					i = 0;
					j = c.stepZoom;
					F = o + s;
					s = l.align;
					o = l.rotation;
					h = l.style;
					i = n(parseInt(h.lineHeight), 12);
					j.catClipRect = d.clipRect( - (C / 2), 0, p +
					C, c.chartHeight);
					j.catGroup = d.g("catGroup").translate(r, F).clip(j.catClipRect).add(c.seriesGroup);
					if (f && f.length > 0) {
						p = j.catLabelArr = [];
						C = f.length;
						r = l.y || 0;
						l = l.x || 0;
						j.catLabelClipXDisplacement = -(i / 2);
						j.xDisplacement = l;
						for (i = 0; i < C; i += 1) k = f[i],
						qa(k) && (F = i - g, e = F * m + l, e = p[i] = d.text(k, e, r).attr({
							align: s,
							rotation: o
						}).css(h).add(j.catGroup), (F < 0 || F % B !== 0) && e.hide())
					}
					b.setScrollPosition(q)
				}
				var v,
				m = a.options,
				g = (B = (g = m.animation) && a.animate) ? g && g.duration || 500: 0,
				u = a.clipRect;
				q = c.stepZoom;
				q = q.scrollPosition * q.scrollablePXLength;
				p = c.plotLeft - q;
				if (!u && (r = c.plotSizeX, b = c.plotSizeY, u = a.clipRect = !c.hasRendered && c.clipRect ? c.clipRect: d.clipRect(q, 0, r, b), u.cliprectX = q, u.cliprectY = 0, u.cliprectW = r, u.cliprectH = b, !c.clipRect)) c.clipRect = u;
				if (!a.group) v = a.group = d.g("series"),
				v.clip(a.clipRect).attr({
					visibility: a.visible ? ma: "hidden",
					zIndex: m.zIndex
				}).translate(p, c.plotTop).add(c.seriesGroup);
				B && a.animate(!0);
				a.drawGraph && a.drawGraph();
				a.drawPoints();
				a.drawDataLabels();
				a.options.enableMouseTracking !== !1 && a.drawTracker();
				B && a.animate();
				setTimeout(function() {
					u.isAnimating = !1;
					if ((v = a.group) && u !== c.clipRect && u.renderer) v.clip(a.clipRect = c.clipRect),
					u.destroy()
				},
				g);
				a.isDirty = !1
			}
		});
		na.stepzoom = t;
		db(L.Renderer.prototype.symbols, {
			pinModeIcon: function(a, c, d) {
				c -= 1.5;
				var b = d * 2 / 3,
				g = a - d,
				m = a + d,
				e = a - b,
				f = a + b,
				k = a + 0.5,
				l = k + 1,
				j = k + 1.5,
				i = c - d,
				h = c + b,
				p = c - b,
				d = c + (d - b);
				return [G, g, i, N, e, p, e, d, g, h, a - 0.5, h, a, c + c + 0.5, k, h, m, h, f, d, f, p, m, i, j, i, j, p, j, d, l, d, l, p, j, p, j, i, K]
			},
			zoomOutIcon: function(a, c, d, b, g) {
				a -= 1;
				c -= 1;
				var m = d - 0.25,
				b = 43 * ra,
				e = 48 * ra,
				d = a + m * ca(b),
				b = c + m * aa(b),
				f = a + m * ca(e),
				e = c + m * aa(e),
				k = 45 * ra,
				l = d + 4 * ca(k),
				j = b + 4 * aa(k),
				i = f + 4 * ca(k),
				k = e + 4 * aa(k),
				g = g.getArcPath(a, c, d, b, f, e, m, m, 0, 1),
				m = ["M", d, b],
				m = m.concat(g);
				return m = m.concat("Z", "M", d + 1, b + 1, "L", l, j, i, k, f + 1, e + 1, "Z", "M", a - 2, c, "L", a + 2, c, "Z")
			},
			resetIcon: function(a, c, d, b, g) {
				var b = a - d,
				m = (Da + $) / 2,
				e = a + d * ca(m),
				m = c + d * aa(m),
				f = d * 2 / 3;
				return [G, b, c].concat(g.getArcPath(a, c, b, c, e, m, d, d, 1, 1), [N, e + f, m - 1, e + 2, m + f - 0.5, e, m])
			}
		});
		Ba.pie3d = Ta(Ba.pie, {
			states: {
				hover: {}
			}
		});
		var Qa = function(a, c) {
			return gb(a[1] - (this.pageY || this.originalEvent && this.originalEvent.pageY) + c.top, a[0] - (this.pageX || this.originalEvent && this.originalEvent.pageX) + c.left)
		};
		ya.prototype = {
			parseColor: function(a, c) {
				var d,
				b,
				g,
				m,
				e,
				f = c / 2,
				k,
				l,
				j,
				i;
				this.use3DLighting ? (d = sa(a, 80), b = sa(a, 75), g = la(a, 85), m = la(a, 70), e = la(a, 40)) : (d = sa(a, 90), b = sa(a, 87), g = la(a, 93), m = la(a, 87), e = la(a, 80));
				k = b + y + g + y + m + y + g + y + b;
				j = c + y + c + y + c + y + c + y + c;
				l = b + y + a + y + g + y + a + y + b;
				i = f + y + f + y + f + y + f + y + f;
				return {
					frontOuter: {
						FCcolor: {
							gradientUnits: "objectBoundingBox",
							x1: 0,
							y1: 0,
							x2: 1,
							y2: 0,
							color: k,
							alpha: j,
							angle: 0,
							ratio: "0,25,5,5,65"
						}
					},
					backOuter: {
						FCcolor: {
							gradientUnits: "objectBoundingBox",
							x1: 0,
							y1: 0,
							x2: 1,
							y2: 0,
							color: b + y + a + y + e + y + a + y + b,
							alpha: i,
							angle: 0,
							ratio: "0,62,8,8,22"
						}
					},
					frontInner: {
						FCcolor: {
							gradientUnits: "objectBoundingBox",
							x1: 0,
							y1: 0,
							x2: 1,
							y2: 0,
							color: l,
							alpha: i,
							angle: 0,
							ratio: "0,25,5,5,65"
						}
					},
					backInner: {
						FCcolor: {
							gradientUnits: "objectBoundingBox",
							x1: 0,
							y1: 0,
							x2: 1,
							y2: 0,
							color: k,
							alpha: j,
							angle: 0,
							ratio: "0,62,8,8,22"
						}
					},
					top: ea ? {
						FCcolor: {
							gradientUnits: "objectBoundingBox",
							radialGradient: !0,
							cx: 0.3,
							cy: 0.95,
							r: 1,
							color: m + y + g + y + b,
							alpha: c + y + c + y + c,
							ratio: "0,10,90"
						}
					}: {
						FCcolor: {
							gradientUnits: "objectBoundingBox",
							color: m + y + m + y + g + y + b,
							alpha: c + y + c + y + c + y + c,
							angle: -72,
							ratio: "0,8,15,77"
						}
					},
					bottom: X(a, f),
					startSlice: X(d, c),
					endSlice: X(d, c)
				}
			},
			rotate: function(a) {
				if (!this.hasOnePoint) {
					for (var c = this.pointElemStore, d = 0, b = c.length, g; d < b; d += 1) g = c[d],
					g = g._confObject,
					g.start += a,
					g.end += a,
					this.updateSliceConf(g);
					this.refreashDrawing()
				}
			},
			refreashDrawing: function() {
				var a = function(a, d) {
					var b = a._conf.index - d._conf.index;
					return b ? b: a._conf.isStart - d._conf.isStart
				};
				return function() {
					var c = this.slicingWallsArr,
					d = 0,
					b,
					g = c.length,
					m = null,
					e = null,
					f,
					k = this.slicingWallsFrontGroup.element,
					l = this.slicingWallsBackGroup.element;
					for (c.sort(a); d < g; d += 1) b = c[d],
					f = b._conf.index,
					f < Da ? k.appendChild(b.element) : f < $ ? (k.insertBefore(b.element, m), m = b.element) : f < Va ? (l.insertBefore(b.element, e), e = b.element) : l.appendChild(b.element)
				}
			} (),
			updateSliceConf: function(a, c) {
				var d = a.start,
				b = a.end,
				g = ta(d),
				m = ta(b),
				e,
				f,
				k,
				l,
				j,
				i,
				h,
				p,
				n,
				s,
				o,
				r,
				q,
				t,
				C,
				B,
				v = this.cx,
				u = this.cy,
				D = this.rx,
				w = this.ry,
				H = D + 2,
				y = w + 2,
				I = this.innerRx,
				x = this.innerRy,
				J = this.depth,
				E = this.depthY,
				A = this.renderer,
				M = a.elements,
				L,
				z,
				O,
				V;
				f = ca(g);
				k = aa(g);
				l = ca(m);
				j = aa(m);
				i = v + D * f;
				h = u + w * k;
				p = v + H * f;
				n = u + y * k;
				L = h + J;
				z = v + D * l;
				O = u + w * j;
				s = v + H * l;
				o = u + y * j;
				V = O + J;
				this.isDoughnut ? (e = v + I * f, r = u + x * k, C = r + J, q = v + I * l, t = u + x * j, B = t + J, a.startSlice = [G, i, h, N, i, L, e, C, e, r, K], a.endSlice = [G, z, O, N, z, V, q, B, q, t, K]) : (a.startSlice = [G, i, h, N, i, L, v, E, v, u, K], a.endSlice = [G, z, O, N, z, V, v, E, v, u, K]);
				if (ea) {
					a && a.clipTopPath ? (a.clipTopPath[1] = p, a.clipTopPath[2] = n, a.clipTopPath[9] = s, a.clipTopPath[10] = o) : a.clipTopPath = [G, p, n, da, H, y, 0, 0, 1, s, o, N, this.cx, this.cy, K];
					if (d != b) {
						if (g > m) if (g < $) {
							if (a.clipOuterFrontPath = [G, this.leftX, this.topY, N, i, this.topY, i, this.bottomY, this.leftX, this.bottomY, K, G, z, this.topY, N, this.rightX, this.topY, this.rightX, this.bottomY, z, this.bottomY, K], a.clipOuterBackPath = this.clipPathforOuter, this.isDoughnut) a.clipInnerBackPath = this.clipPathforInner,
							a.clipInnerFrontPath = [G, this.leftInnerX, this.topY, N, e, this.topY, e, this.bottomY, this.leftInnerX, this.bottomY, K, G, q, this.topY, N, this.rightInnerX, this.topY, this.rightInnerX, this.bottomY, q, this.bottomY, K]
						} else if (m > $) {
							if (a.clipOuterFrontPath = this.clipPathforOuter, a.clipOuterBackPath = [G, this.rightX, this.topY, N, i, this.topY, i, this.bottomY, this.rightX, this.bottomY, K, G, z, this.topY, N, this.leftX, this.topY, this.leftX, this.bottomY, z, this.bottomY, K], this.isDoughnut) a.clipInnerBackPath = [G, this.rightInnerX, this.topY, N, e, this.topY, e, this.bottomY, this.rightInnerX, this.bottomY, K, G, q, this.topY, N, this.leftInnerX, this.topY, this.leftInnerX, this.bottomY, q, this.bottomY, K],
							a.clipInnerFrontPath = this.clipPathforInner
						} else {
							if (a.clipOuterFrontPath = [G, this.rightX, this.topY, N, z, this.topY, z, this.bottomY, this.rightX, this.bottomY, K], a.clipOuterBackPath = [G, this.rightX, this.topY, N, i, this.topY, i, this.bottomY, this.rightX, this.bottomY, K], this.isDoughnut) a.clipInnerBackPath = [G, this.rightInnerX, this.topY, N, e, this.topY, e, this.bottomY, this.rightInnerX, this.bottomY, K],
							a.clipInnerFrontPath = [G, this.rightInnerX, this.topY, N, q, this.topY, q, this.bottomY, this.rightInnerX, this.bottomY, K]
						} else if (g < $) if (m > $) {
							if (a.clipOuterFrontPath = [G, i, this.topY, N, this.leftX, this.topY, this.leftX, this.bottomY, i, this.bottomY, K], a.clipOuterBackPath = [G, z, this.topY, N, this.leftX, this.topY, this.leftX, this.bottomY, z, this.bottomY, K], this.isDoughnut) a.clipInnerBackPath = [G, q, this.topY, N, this.leftInnerX, this.topY, this.leftInnerX, this.bottomY, q, this.bottomY, K],
							a.clipInnerFrontPath = [G, e, this.topY, N, this.leftInnerX, this.topY, this.leftInnerX, this.bottomY, e, this.bottomY, K]
						} else {
							if (a.clipOuterFrontPath = [G, i, this.topY, N, z, this.topY, z, this.bottomY, i, this.bottomY, K], a.clipOuterBackPath = this.clipPathforNoClip, this.isDoughnut) a.clipInnerBackPath = this.clipPathforNoClip,
							a.clipInnerFrontPath = [G, e, this.topY, N, q, this.topY, q, this.bottomY, e, this.bottomY, K]
						} else if (a.clipOuterFrontPath = this.clipPathforNoClip, a.clipOuterBackPath = [G, i, this.topY, N, z, this.topY, z, this.bottomY, i, this.bottomY, K], this.isDoughnut) a.clipInnerBackPath = [G, e, this.topY, N, q, this.topY, q, this.bottomY, e, this.bottomY, K],
						a.clipInnerFrontPath = this.clipPathforNoClip;
						e = m - g;
						e < 0 && (e = ua - e);
						a.clipTopPath[7] = e > $ ? 1: 0
					} else a.clipOuterFrontPath = a.clipOuterBackPath = a.clipInnerBackPath = a.clipInnerFrontPath = this.clipPathforNoClip;
					if (!c) a.elements.startSlice._conf.index = g,
					a.elements.endSlice._conf.index = m,
					a.clipTop.attr({
						d: a.clipTopPath
					}),
					a.clipOuterFront.attr({
						d: a.clipOuterFrontPath
					}),
					a.clipOuterBack.attr({
						d: a.clipOuterBackPath
					}),
					this.isDoughnut && (a.clipInnerBack.attr({
						d: a.clipInnerBackPath
					}), a.clipInnerFront.attr({
						d: a.clipInnerFrontPath
					})),
					this.hasOnePoint ? (a.elements.startSlice.hide(), a.elements.endSlice.hide()) : (a.elements.startSlice.attr({
						d: a.startSlice
					}).show(), a.elements.endSlice.attr({
						d: a.endSlice
					}).show())
				} else {
					f = this.moveCmdArr;
					k = this.lineCmdArr;
					l = this.closeCmdArr;
					var P = this.centerPoint;
					j = this.leftPoint;
					p = this.topPoint;
					n = this.rightPoint;
					s = this.bottomPoint;
					var S = this.leftDepthPoint,
					T = this.rightDepthPoint;
					o = this.leftInnerPoint;
					H = this.rightInnerPoint;
					y = this.leftInnerDepthPoint;
					J = this.rightInnerDepthPoint;
					if (d != b) {
						if (g > m ? g < $ ? (d = A.getArcPath(v, u, i, h, this.leftX, u, D, w, 1, 0), b = A.getArcPath(v, u, this.leftX, u, this.rightX, u, D, w, 1, 0), O = A.getArcPath(v, u, this.rightX, u, z, O, D, w, 1, 0), a.outerBackPath = f.concat(j, b, k, T, A.getArcPath(v, E, this.rightX, E, this.leftX, E, D, w, 0, 0), l), a.outerFrontPath = f.concat([i, h], d, k, S, A.getArcPath(v, E, this.leftX, E, i, L, D, w, 0, 0), l, f, n, O, k, [z, V], A.getArcPath(v, E, z, V, this.rightX, E, D, w, 0, 0), l), a.topBorderPath = f.concat([i, h], d, b, O), this.isDoughnut ? (i = A.getArcPath(v, u, q, t, this.rightInnerX, u, I, x, 0, 0), h = A.getArcPath(v, u, this.rightInnerX, u, this.leftInnerX, u, I, x, 0, 0), r = A.getArcPath(v, u, this.leftInnerX, u, e, r, I, x, 0, 0), a.innerBackPath = f.concat(H, h, k, y, A.getArcPath(v, E, this.leftInnerX, E, this.rightInnerX, E, I, x, 1, 0), l), a.innerFrontPath = f.concat(o, r, k, [e, C], A.getArcPath(v, E, e, C, this.leftInnerX, E, I, x, 1, 0), l, f, [q, t], i, k, J, A.getArcPath(v, E, this.rightInnerX, E, q, B, I, x, 1, 0), l), a.topPath = a.topBorderPath.concat(k, [q, t], i, h, r, l), a.topBorderPath = a.topBorderPath.concat(f, [q, t], i, h, r)) : a.topPath = a.topBorderPath.concat(k, P, l)) : m > $ ? (d = A.getArcPath(v, u, i, h, this.rightX, u, D, w, 1, 0), b = A.getArcPath(v, u, this.rightX, u, this.leftX, u, D, w, 1, 0), O = A.getArcPath(v, u, this.leftX, u, z, O, D, w, 1, 0), a.outerFrontPath = f.concat(n, b, k, S, A.getArcPath(v, E, this.leftX, E, this.rightX, E, D, w, 0, 0), l), a.outerBackPath = f.concat([i, h], d, k, T, A.getArcPath(v, E, this.rightX, E, i, L, D, w, 0, 0), l, f, j, O, k, [z, V], A.getArcPath(v, E, z, V, this.leftX, E, D, w, 0, 0), l), a.topBorderPath = f.concat([i, h], d, b, O), this.isDoughnut ? (i = A.getArcPath(v, u, q, t, this.leftInnerX, u, I, x, 0, 0), h = A.getArcPath(v, u, this.leftInnerX, u, this.rightInnerX, u, I, x, 0, 0), r = A.getArcPath(v, u, this.rightInnerX, u, e, r, I, x, 0, 0), a.innerFrontPath = f.concat(o, h, k, J, A.getArcPath(v, E, this.rightInnerX, E, this.leftInnerX, E, I, x, 1, 0), l), a.innerBackPath = f.concat(H, r, k, [e, C], A.getArcPath(v, E, e, C, this.rightInnerX, E, I, x, 1, 0), l, f, [q, t], i, k, y, A.getArcPath(v, E, this.leftInnerX, E, q, B, I, x, 1, 0), l), a.topPath = a.topBorderPath.concat(k, [q, t], i, h, r, l), a.topBorderPath = a.topBorderPath.concat(f, [q, t], i, h, r)) : a.topPath = a.topBorderPath.concat(k, P, l)) : (d = A.getArcPath(v, u, i, h, this.rightX, u, D, w, 1, 0), b = A.getArcPath(v, u, this.rightX, u, z, O, D, w, 1, 0), a.outerFrontPath = f.concat(n, b, k, [z, V], A.getArcPath(v, E, z, V, this.rightX, E, D, w, 0, 0), l), a.outerBackPath = f.concat([i, h], d, k, T, A.getArcPath(v, E, this.rightX, E, i, L, D, w, 0, 0), l), a.topBorderPath = f.concat([i, h], d, b), this.isDoughnut ? (i = A.getArcPath(v, u, q, t, this.rightInnerX, u, I, x, 0, 0), h = A.getArcPath(v, u, this.rightInnerX, u, e, r, I, x, 0, 0), a.innerFrontPath = f.concat([q, t], i, k, J, A.getArcPath(v, E, this.rightInnerX, E, q, B, I, x, 1, 0), l), a.innerBackPath = f.concat(H, h, k, [e, C], A.getArcPath(v, E, e, C, this.rightInnerX, E, I, x, 1, 0), l), a.topPath = a.topBorderPath.concat(k, [q, t], i, h, l), a.topBorderPath = a.topBorderPath.concat(f, [q, t], i, h)) : a.topPath = a.topBorderPath.concat(k, P, l)) : g < $ ? m > $ ? (d = A.getArcPath(v, u, i, h, this.leftX, u, D, w, 1, 0), b = A.getArcPath(v, u, this.leftX, u, z, O, D, w, 1, 0), a.outerBackPath = f.concat(j, b, k, [z, V], A.getArcPath(v, E, z, V, this.leftX, E, D, w, 0, 0), l), a.outerFrontPath = f.concat([i, h], d, k, S, A.getArcPath(v, E, this.leftX, E, i, L, D, w, 0, 0), l), a.topBorderPath = f.concat([i, h], d, b), this.isDoughnut ? (i = A.getArcPath(v, u, q, t, this.leftInnerX, u, I, x, 0, 0), h = A.getArcPath(v, u, this.leftInnerX, u, e, r, I, x, 0, 0), a.innerBackPath = f.concat([q, t], i, k, y, A.getArcPath(v, E, this.leftInnerX, E, q, B, I, x, 1, 0), l), a.innerFrontPath = f.concat(o, h, k, [e, C], A.getArcPath(v, E, e, C, this.leftInnerX, E, I, x, 1, 0), l), a.topPath = a.topBorderPath.concat(k, [q, t], i, h, l), a.topBorderPath = a.topBorderPath.concat(f, [q, t], i, h)) : a.topPath = a.topBorderPath.concat(k, P, l)) : (d = A.getArcPath(v, u, i, h, z, O, D, w, 1, 0), a.outerBackPath = f.concat([i, h]), a.topBorderPath = a.outerBackPath.concat(d), a.outerFrontPath = a.topBorderPath.concat(k, [z, V], A.getArcPath(v, E, z, V, i, L, D, w, 0, 0), l), this.isDoughnut ? (i = A.getArcPath(v, u, q, t, e, r, I, x, 0, 0), a.innerBackPath = f.concat([q, t]), a.topPath = a.topBorderPath.concat(k, [q, t], i, l), a.topBorderPath = a.topBorderPath.concat(f, [q, t], i), a.innerFrontPath = a.innerBackPath.concat(i, k, [e, C], A.getArcPath(v, E, e, C, q, B, I, x, 1, 0), l)) : a.topPath = a.topBorderPath.concat(k, P, l)) : (d = A.getArcPath(v, u, i, h, z, O, D, w, 1, 0), a.outerFrontPath = f.concat([i, h]), a.topBorderPath = a.outerFrontPath.concat(d), a.outerBackPath = a.topBorderPath.concat(k, [z, V], A.getArcPath(v, E, z, V, i, L, D, w, 0, 0), l), this.isDoughnut ? (i = A.getArcPath(v, u, q, t, e, r, I, x, 0, 0), a.innerFrontPath = f.concat([q, t]), a.topPath = a.topBorderPath.concat(k, [q, t], i, l), a.topBorderPath = a.topBorderPath.concat(a.innerFrontPath, i), a.innerBackPath = a.innerFrontPath.concat(i, k, [e, C], A.getArcPath(v, E, e, C, q, B, I, x, 1, 0), l)) : a.topPath = a.topBorderPath.concat(k, P, l)), d = f.concat(j, k, n), i = f.concat(p, k, s), a.topPath = a.topPath.concat(d, i), a.outerFrontPath = a.outerFrontPath.concat(d), a.outerBackPath = a.outerBackPath.concat(d), this.isDoughnut) i = f.concat(o, k, H),
						a.innerFrontPath = a.innerFrontPath.concat(i),
						a.innerBackPath = a.innerBackPath.concat(i)
					} else if (a.topPath = a.outerFrontPath = a.outerBackPath = [], this.isDoughnut) a.innerFrontPath = a.innerBackPath = [];
					if (!c) a.elements.startSlice._conf.index = g,
					a.elements.endSlice._conf.index = m,
					a.thisElement.attr({
						d: a.topPath
					}),
					M.topBorder.attr({
						d: a.topBorderPath
					}),
					M.bottom.attr({
						d: a.topPath
					}),
					M.bottomBorder.attr({
						d: a.topBorderPath
					}),
					M.frontOuter.attr({
						d: a.outerFrontPath
					}),
					M.backOuter.attr({
						d: a.outerBackPath
					}),
					this.isDoughnut && (M.frontInner.attr({
						d: a.innerFrontPath
					}), M.backInner.attr({
						d: a.innerBackPath
					})),
					this.hasOnePoint ? (a.elements.startSlice.hide(), a.elements.endSlice.hide()) : (a.elements.startSlice.attr({
						d: a.startSlice
					}).show(), a.elements.endSlice.attr({
						d: a.endSlice
					}).show())
				}
			},
			createSlice: function() {
				var a = {
					stroke: !0,
					strokeWidth: !0,
					"stroke-width": !0,
					dashstyle: !0,
					"stroke-dasharray": !0,
					translateX: !0,
					translateY: !0,
					"stroke-opacity": !0,
					fill: !0,
					opacity: !0,
					isTracker: !0,
					start: !0,
					end: !0
				},
				c = function(b, d) {
					var c,
					g,
					j = this,
					i = j._confObject,
					h,
					m = i.elements,
					n,
					r,
					o = i.pie3DManager;
					typeof b === "string" && qa(d) && (c = b, b = {},
					b[c] = d);
					if (typeof b === "string") j = a[b] ? i[b] : j._attr(b);
					else {
						for (c in b) if (g = b[c], a[c]) if (i[c] = g, c === "translateX" || c === "translateY" || c === "isTracker") {
							h = {};
							h[c] = g;
							for (n in m) m[n].attr(h);
							j._attr(h)
						} else if (c === "stroke" || c === "strokeWidth" || c === "stroke-width" || c === "dashstyle" || c === "stroke-dasharray") h = {},
						h[c] = g,
						m.topBorder.attr(h),
						m.startSlice.attr(h),
						m.endSlice.attr(h),
						m.bottomBorder.attr(h);
						else {
							if (c !== "fill" && (c === "start" || c === "end")) r = !0
						} else j._attr(c, g);
						r && o.updateSliceConf(i);
						o.refreashDrawing()
					}
					return j
				},
				d = function(a, b) {
					var c = this._confObject.elements,
					d;
					for (d in c) c[d].on(a, b);
					return this._on(a, b)
				},
				b = function() {
					var a = this._confObject.elements,
					b;
					for (b in a) a[b].hide();
					return this._hide()
				},
				g = function() {
					var a = this._confObject.elements,
					b;
					for (b in a) a[b].show();
					return this._show()
				},
				h = function() {
					var a = this._confObject,
					b = a.elements,
					c;
					for (c in b) b[c].destroy();
					ea && (a.clipTop.destroy(), a.clipOuterFront.destroy(), a.clipOuterBack.destroy(), a.clipInnerFront && a.clipInnerFront.destroy(), a.clipInnerBack && a.clipInnerBack.destroy());
					return this._destroy()
				};
				return function(a, f, k, l, j, i) {
					var n = this.renderer,
					k = this.parseColor(k, l),
					f = {
						start: a,
						end: f,
						elements: {},
						pie3DManager: this,
						topPath: this.topPath,
						topBorderPath: this.topBorderPath,
						outerFrontPath: this.outerFrontPath,
						outerBackPath: this.outerBackPath,
						innerFrontPath: this.innerFrontPath,
						innerBackPath: this.innerBackPath
					},
					l = this.slicingWallsArr,
					p = f.elements;
					this.updateSliceConf(f, !0);
					a = n.path(f.topPath).attr({
						fill: k.top,
						"stroke-width": 0
					}).add(this.topGroup);
					p.topBorder = n.path(f.topBorderPath).attr({
						stroke: j,
						"stroke-width": i
					}).add(this.topGroup);
					p.bottom = n.path(f.topPath).attr({
						fill: k.bottom,
						"stroke-width": 0
					}).add(this.bottomBorderGroup);
					p.bottomBorder = n.path(f.topBorderPath).attr({
						stroke: j,
						"stroke-width": i
					}).add(this.bottomBorderGroup);
					p.frontOuter = n.path(f.outerFrontPath).attr({
						fill: k.frontOuter,
						"stroke-width": 0
					}).add(this.outerFrontGroup);
					p.backOuter = n.path(f.outerBackPath).attr({
						fill: k.backOuter,
						"stroke-width": 0
					}).add(this.outerBackGroup);
					p.startSlice = n.path(f.startSlice).attr({
						fill: k.startSlice,
						stroke: j,
						"stroke-width": i
					}).add(this.slicingWallsFrontGroup);
					p.endSlice = n.path(f.endSlice).attr({
						fill: k.endSlice,
						stroke: j,
						"stroke-width": i
					}).add(this.slicingWallsFrontGroup);
					l.push(p.startSlice, p.endSlice);
					p.startSlice._conf = {
						index: ta(f.start),
						isStart: 1
					};
					p.endSlice._conf = {
						index: ta(f.end),
						isStart: 0
					};
					this.hasOnePoint && (p.startSlice.hide(), p.endSlice.hide());
					if (this.isDoughnut) p.frontInner = n.path(f.innerFrontPath).attr({
						fill: k.frontInner,
						"stroke-width": 0
					}).add(this.innerFrontGroup),
					p.backInner = n.path(f.innerBackPath).attr({
						fill: k.backInner,
						"stroke-width": 0
					}).add(this.innerBackGroup);
					if (ea && (f.clipTop = n.clipPath(f.clipTopPath), f.clipOuterFront = n.clipPath(f.clipOuterFrontPath), f.clipOuterBack = n.clipPath(f.clipOuterBackPath), a.clip(f.clipTop), p.topBorder.clip(f.clipTop), p.bottom.clip(f.clipTop), p.bottomBorder.clip(f.clipTop), p.frontOuter.clip(f.clipOuterFront), p.backOuter.clip(f.clipOuterBack), this.isDoughnut)) f.clipInnerFront = n.clipPath(f.clipInnerFrontPath),
					f.clipInnerBack = n.clipPath(f.clipInnerBackPath),
					p.frontInner.clip(f.clipInnerFront),
					p.backInner.clip(f.clipInnerBack);
					a._confObject = f;
					f.thisElement = a;
					a._destroy = a.destroy;
					a.destroy = h;
					a._show = a.show;
					a.show = g;
					a._hide = a.hide;
					a.hide = b;
					a._on = a.on;
					a.on = d;
					a._attr = a.attr;
					a.attr = c;
					this.pointElemStore.push(a);
					return a
				}
			} ()
		};
		ya.prototype.constructor = ya;
		L = L.extendClass(na.pie, {
			type: "pie3d",
			translate: function() {
				var a = 0,
				c = this,
				d = c.options,
				b = -1 * (r(this.chart.options.chart.startingAngle, 0) % 360 / 360),
				g = n(d.dataLabels.distance, 20),
				h = c.slicedOffset = d.slicedOffset,
				e = Ga([], d.center),
				f = c.chart,
				k = f.plotWidth,
				l = f.plotHeight,
				j,
				i,
				t,
				p = c.data,
				y = 2 * Ka,
				s,
				o = Ja(k, l),
				F,
				q,
				G,
				C = d.dataLabels.distance,
				B = c.pieYScale = d.pieYScale,
				v = c.pieSliceDepth = d.pieSliceDepth,
				u = c.managedPieSliceDepth = d.managedPieSliceDepth,
				D = c.slicedOffsetY = h * B;
				e.push(d.size, d.innerSize || 0);
				e = Ha(e,
				function(a, b) {
					return (F = /%$/.test(a)) ? [k, l - u, o, o][b] * parseInt(a, 10) / 100: a
				});
				e[2] /= 2;
				e[3] /= 2;
				e.push(e[2] * B);
				e.push((e[2] + e[3]) / 2);
				e.push(e[5] * B);
				c.getX = function(a, b) {
					t = fa.asin((a - e[1]) / (e[2] + C));
					return e[0] + (b ? -1: 1) * ca(t) * (e[2] + C)
				};
				c.center = e;
				ia(p,
				function(b) {
					a += b.y
				});
				c.labelsRadius = e[2] + g;
				c.labelsRadiusY = c.labelsRadius * B;
				c.quadrantHeight = (l - u) / 2;
				c.quadrantWidth = k / 2;
				var w = d.dataLabels,
				g = n(parseInt(w.style.fontSize, 10), 10) + 4;
				c.maxLabels = Math.floor(c.quadrantHeight / g);
				c.labelFontSize = g;
				c.connectorPadding = n(w.connectorPadding, 5);
				c.isSmartLineSlanted = r(w.isSmartLineSlanted, !0);
				c.connectorWidth = n(w.connectorWidth, 1);
				c.enableSmartLabels = w.enableSmartLabels;
				if (!c.pie3DManager) c.pie3DManager = new ya(e[0], e[1], e[2], e[3], B, v, void 0, f.renderer, c.data.length === 1, d.use3DLighting);
				ia(p,
				function(d) {
					s = a ? d.y / a: 0;
					j = Ca(b * y * 1E3) / 1E3;
					b += s;
					i = Ca(b * y * 1E3) / 1E3;
					d.shapeArgs = {
						start: j,
						end: i
					};
					d.centerAngle = t = (i + j) / 2 % ua;
					d.slicedTranslation = Ha([ca(t) * h + f.plotLeft, aa(t) * D + f.plotTop], Ca);
					q = ca(t) * e[2];
					c.radiusY = G = aa(t) * e[4];
					d.tooltipPos = [e[0] + q * 0.7, e[1] + G];
					d.percentage = s * 100;
					d.total = a
				});
				this.setTooltipPoints()
			},
			drawDataLabels: function() {
				var a = function(a, b) {
					return a.point.y - b.point.y
				},
				c = function(a, b) {
					return a.angle - b.angle
				},
				d = ["left", "left", "right", "right"],
				b = [ - 1, 1, 1, -1],
				g = [1, 1, -1, -1];
				return function(h) {
					var e = this.data,
					f,
					k,
					l = this.chart,
					j = l.options.instanceAPI.smartLabel,
					i = this.options.dataLabels;
					f = i.style;
					var r = n(parseInt(f.lineHeight, 10), 12),
					p = i.placeInside,
					t = i.skipOverlapLabels,
					s = i.manageLabelOverflow,
					o = this.connectorPadding,
					y = this.connectorWidth,
					q,
					J = i.distance;
					za(i.softConnector, !0);
					var J = J > 0,
					C,
					B = this.center,
					v = B[1],
					u = B[0],
					D = B[2],
					w = B[4],
					H = [[], [], [], []],
					K,
					I = l.plotLeft,
					x = l.plotTop,
					l = l.plotSizeX,
					M,
					E,
					A,
					L,
					S,
					z,
					O,
					V,
					P,
					Y = this.labelsRadius;
					C = this.labelsRadiusY;
					var T,
					Z = this.labelFontSize,
					ha = Z,
					X = ha / 2,
					o = [o, o, -o, -o],
					ba = this.maxLabels,
					ea = this.isSmartLineSlanted,
					ga = this.enableSmartLabels,
					U,
					da = this.pieSliceDepth / 2;
					h || (cb.prototype.drawDataLabels.apply(this), j.setStyle(f));
					if (e.length == 1) {
						if (f = e[0], U = f.dataLabel, f.slicedTranslation = [I, x], U) U.attr({
							visibility: ma,
							align: "center",
							x: u,
							y: v + X - 2
						}),
						U.x = u
					} else if (p) ia(e,
					function(a) {
						if (U = a.dataLabel) {
							var b = a.centerAngle;
							P = v + B[6] * aa(b) + X - 2;
							z = u + B[5] * ca(b);
							U.x = z;
							U._x = z;
							U.y = P;
							if (a.sliced) {
								var b = a.slicedTranslation,
								c = b[1] - x;
								z += b[0] - I;
								P += c
							}
							U.attr({
								visibility: ma,
								align: "center",
								x: z,
								y: P
							});
							a.dataLabelBG = U.textBound()
						}
					});
					else {
						ia(e,
						function(a) {
							if (U = a.dataLabel) {
								var b = a.centerAngle;
								b < 0 && (b = ua + b);
								H[b < Da ? 1: b < $ ? 2: b < Va ? 3: 0].push({
									point: a,
									angle: b
								})
							}
						});
						for (e = h = 4; e--;) {
							if (t && (f = H[e].length - ba, f > 0)) {
								H[e].sort(a);
								T = H[e].splice(0, f);
								p = 0;
								for (A = T.length; p < A; p += 1) f = T[p].point,
								f.dataLabel.attr({
									visibility: "hidden"
								}),
								f.connector && f.connector.attr({
									visibility: "hidden"
								})
							}
							H[e].sort(c)
						}
						e = ka(H[0].length, H[1].length, H[2].length, H[3].length);
						T = ka(Ja(e, ba) * ha, C);
						H[1].reverse();
						for (H[3].reverse(); h--;) {
							p = H[h];
							A = p.length;
							t || (ha = A > ba ? T / A: Z, X = ha / 2);
							f = A * ha - X;
							C = T + X;
							for (e = 0; e < A; e += 1, f -= ha) q = Ua(T * aa(p[e].angle)),
							C - q < ha ? q = C - ha: q < f && (q = f),
							C = p[e].oriY = q;
							K = d[h];
							A = T - A * ha + X;
							C = -X;
							for (e = p.length - 1; e >= 0; e -= 1, A += ha) {
								f = p[e].point;
								k = p[e].angle;
								L = f.sliced;
								U = f.dataLabel;
								q = Ua(T * aa(k));
								q - C < ha ? q = C + ha: q > A && (q = A);
								C = q;
								O = (q + p[e].oriY) / 2;
								q = u + g[h] * Y * ca(fa.asin(O / T));
								O *= b[h];
								O += v;
								V = v + w * aa(k);
								S = u + D * ca(k);
								z = q + o[h];
								P = O + X - 2;
								U.x = z;
								U._x = z;
								if (s) M = h > 1 ? z: l - z,
								E = U._str = U._str || U.textStr || U.element && U.element.innerHTML,
								U.attr({
									text: j.getSmartText(E, M, r).text
								});
								k < $ && (O += da, V += da, P += da);
								U.y = P;
								if (L) L = f.slicedTranslation,
								k = L[0] - I,
								L = L[1] - x,
								z += k,
								q += k,
								S += k,
								V += L;
								U.attr({
									visibility: ma,
									align: K,
									x: z,
									y: P
								});
								f.dataLabelBG = U.textBound();
								if (J && y && ga) k = f.connector,
								f.connectorPath = q = [G, S, V, N, ea ? q: S, O, z, O],
								k ? (k.attr({
									d: q
								}), k.attr("visibility", ma)) : f.connector = k = this.chart.renderer.path(q).attr({
									"stroke-width": y,
									stroke: i.connectorColor || "#606060",
									visibility: ma,
									zIndex: 3
								}).translate(I, x).add()
							}
						}
					}
				}
			} (),
			rotate: function(a) {
				var c = this.data,
				d = this.slicedOffset,
				b = this.slicedOffsetY,
				g = this.chart.plotLeft,
				h = this.chart.plotTop,
				e = n(this.chart.options.chart.startingAngle, 0),
				f,
				k = this.center;
				f = (a - e) % 360;
				this.chart.options.chart.startingAngle = n(a, this.chart.options.chart.startingAngle) % 360;
				f = f * Ka / 180;
				this.pie3DManager && this.pie3DManager.rotate(f);
				ia(c,
				function(a) {
					var c = a.graphic,
					e = a.shapeArgs,
					e = {
						start: e.start += f,
						end: e.end += f
					},
					n = a.centerAngle = ta((e.start + e.end) / 2),
					e = a.sliced,
					p = ca(n),
					n = aa(n);
					a.slicedTranslation = Ha([p * d + g, n * b + h], Ca);
					a.tooltipPos = [k[0] + p * k[2] * 0.7, k[1] + n * k[4]];
					c && e && a.graphic.attr({
						translateX: a.slicedTranslation[0],
						translateY: a.slicedTranslation[1]
					})
				});
				this.drawDataLabels(!0)
			},
			drawPoints: function() {
				var a = this,
				c = a.chart,
				d,
				b;
				ia(a.data,
				function(g) {
					var h = g.sliced,
					e = g.slicedTranslation;
					d = g.graphic;
					b = g.shapeArgs;
					d ? d.animate(b) : (g.graphic = a.pie3DManager.createSlice(b.start, b.end, g.color, g._3dAlpha, g.borderColor, g.borderWidth), g.graphic.translate(h ? e[0] : c.plotLeft, h ? e[1] : c.plotTop));
					g.visible === !1 && g.setVisible(!1)
				});
				a.pie3DManager.refreashDrawing()
			},
			drawTracker: function() {
				var a = this,
				c = a.chart,
				d = +new Date,
				b = a.options,
				g,
				h = [a.center[0] + a.chart.plotLeft, a.center[1] + a.chart.plotTop],
				e,
				f = a.options.enableRotation,
				k,
				l,
				j,
				i,
				n;
				f && (k = function(b) {
					e = eb(a.chart.container);
					a.rotationStartInstanceAngle = Qa.call(b, h, e) - a.chart.options.chart.startingAngle * ra;
					a.chart.tooltip && (b.type === "dragstart" ? a.chart.tooltip.block(!0) : (a.chart.tooltip.block(!1), a.chart.tooltip.refresh(b.data, !0)))
				});
				ia(a.data,
				function(p) {
					if (p.y !== null) {
						if (p.link !== void 0) var r = {
							cursor: "pointer",
							_cursor: "hand"
						};
						j = p.graphic;
						j.attr({
							isTracker: d
						});
						j.on(Ra ? "touchstart": "mouseover",
						function(b) {
							g = b.relatedTarget || b.fromElement;
							if (c.hoverSeries !== a && Aa(g, "isTracker") !== d) a.onMouseOver();
							p.onMouseOver()
						}).on("mouseout",
						function(c) {
							if (!b.stickyTracking && (g = c.relatedTarget || c.toElement, Aa(g, "isTracker") !== d)) a.onMouseOut()
						}).css(r);
						if (f) {
							l = j._confObject;
							i = l.elements;
							for (n in i) va(i[n].element, "dragstart dragend", k, p),
							va(i[n].element, "drag",
							function(b) {
								a.rotate((Qa.call(b, h, e) - a.rotationStartInstanceAngle) / ra)
							});
							va(j.element, "dragstart dragend", k, p);
							va(j.element, "drag",
							function(b) {
								a.rotate((Qa.call(b, h, e) - a.rotationStartInstanceAngle) / ra)
							})
						}
					}
				})
			}
		});
		na.pie3d = L
	}
})();